From 5ac705151ad00ef8ea06f18234d7ef74317126a4 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 21 Aug 2014 09:54:53 -0700 Subject: [PATCH] Add all docs in-tree --- .gitignore | 1 + .travis.install.deps.sh | 3 +- .travis.yml | 23 +- src/doc/Gemfile | 18 + src/doc/Gemfile.lock | 134 ++++++ src/doc/config.rb | 83 ++++ src/doc/mkfonts.rb | 35 ++ src/doc/source/CNAME | 1 + src/doc/source/faq.md | 116 +++++ src/doc/source/guide.md | 398 ++++++++++++++++++ src/doc/source/images/Cargo-Logo-Small.png | Bin 0 -> 68186 bytes src/doc/source/images/forkme.png | Bin 0 -> 5333 bytes src/doc/source/images/noise.png | Bin 0 -> 12873 bytes src/doc/source/index.md | 91 ++++ src/doc/source/javascripts/all.js | 1 + src/doc/source/layouts/layout.erb | 34 ++ src/doc/source/manifest.md | 130 ++++++ src/doc/source/native-build.md | 60 +++ src/doc/source/stylesheets/all.css.scss | 167 ++++++++ src/doc/source/stylesheets/colors.css.scss | 12 + src/doc/source/stylesheets/fonts.css.scss | 39 ++ src/doc/source/stylesheets/normalize.css | 375 +++++++++++++++++ src/doc/source/stylesheets/solarized.css.scss | 71 ++++ src/doc/woffify.rb | 9 + 24 files changed, 1794 insertions(+), 7 deletions(-) create mode 100644 src/doc/Gemfile create mode 100644 src/doc/Gemfile.lock create mode 100644 src/doc/config.rb create mode 100644 src/doc/mkfonts.rb create mode 100644 src/doc/source/CNAME create mode 100644 src/doc/source/faq.md create mode 100644 src/doc/source/guide.md create mode 100644 src/doc/source/images/Cargo-Logo-Small.png create mode 100644 src/doc/source/images/forkme.png create mode 100644 src/doc/source/images/noise.png create mode 100644 src/doc/source/index.md create mode 100644 src/doc/source/javascripts/all.js create mode 100644 src/doc/source/layouts/layout.erb create mode 100644 src/doc/source/manifest.md create mode 100644 src/doc/source/native-build.md create mode 100644 src/doc/source/stylesheets/all.css.scss create mode 100644 src/doc/source/stylesheets/colors.css.scss create mode 100644 src/doc/source/stylesheets/fonts.css.scss create mode 100644 src/doc/source/stylesheets/normalize.css create mode 100644 src/doc/source/stylesheets/solarized.css.scss create mode 100644 src/doc/woffify.rb diff --git a/.gitignore b/.gitignore index 48164142e..ca38a825f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /config.stamp /Makefile /config.mk +src/doc/build diff --git a/.travis.install.deps.sh b/.travis.install.deps.sh index eee1850d4..54bffc80b 100755 --- a/.travis.install.deps.sh +++ b/.travis.install.deps.sh @@ -2,7 +2,8 @@ set -x if [ "${TRAVIS_OS_NAME}" = "osx" ] || [ "${PLATFORM}" = "mac" ]; then target=apple-darwin -elif [ "${TRAVIS_OS_NAME}" = "linux" ] || [ "${PLATFORM}" = "linux" ]; then +elif [ "${TRAVIS_OS_NAME}" = "linux" ] || [ "${PLATFORM}" = "linux" ] || + [ "${TRAVIS_OS_NAME}" = "" ]; then target=unknown-linux-gnu elif [ "${OS}" = "Windows_NT" ] || [ "${PLATFORM}" = "win" ]; then target=pc-mingw32 diff --git a/.travis.yml b/.travis.yml index b897f3577..f1ee1cbd9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,18 +1,29 @@ language: rust - install: - sh ./.travis.install.deps.sh - script: - ./configure --local-rust-root=`pwd`/rustc - make - make test - make distcheck - +after_success: | + [ $TRAVIS_BRANCH = master ] && + [ $TRAVIS_PULL_REQUEST = false ] && + [ $BITS = 64 ] && + [ $(uname -s) = Linux ] && + (cd src/doc && + bundle && + bundle exec middleman build) && + echo crates.io >> src/doc/build/CNAME && + sudo pip install ghp-import + ghp-import -n src/doc/build && + git push -f https://${TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages env: - - BITS=32 - - BITS=64 - + matrix: + - BITS=32 + - BITS=64 + global: + secure: fV37lqpHoVgHJHBdPegut8uf5sfaK/SrLx+Npn1ngPPzUuIh+BZkgqX11FdAxIu05YfI/C/M3smG5SOxb5X0ojK8VQdRtvb8KM6b2G839jegxGk2Bs+bAWMFVrJDl5JCZec+zU/rPlZPXLLnOv23ReGv9UvwgxLw1AJjZ2WkJ5M= os: - linux - osx diff --git a/src/doc/Gemfile b/src/doc/Gemfile new file mode 100644 index 000000000..afd0d1a26 --- /dev/null +++ b/src/doc/Gemfile @@ -0,0 +1,18 @@ +# If you have OpenSSL installed, we recommend updating +# the following line to use "https" +source 'http://rubygems.org' + +gem "middleman", "~>3.3.3" +gem "middleman-blog" + +gem "middleman-syntax" +gem "redcarpet" + +# Live-reloading plugin +gem "middleman-livereload", "~> 3.1.0" + +# For faster file watcher updates on Windows: +gem "wdm", "~> 0.1.0", :platforms => [:mswin, :mingw] + +# Windows does not come with time zone data +gem "tzinfo-data", platforms: [:mswin, :mingw] diff --git a/src/doc/Gemfile.lock b/src/doc/Gemfile.lock new file mode 100644 index 000000000..4ba15d29e --- /dev/null +++ b/src/doc/Gemfile.lock @@ -0,0 +1,134 @@ +GEM + remote: http://rubygems.org/ + specs: + activesupport (4.1.1) + i18n (~> 0.6, >= 0.6.9) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.1) + tzinfo (~> 1.1) + addressable (2.3.6) + chunky_png (1.3.1) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.7.0) + compass (0.12.6) + chunky_png (~> 1.2) + fssm (>= 0.2.7) + sass (~> 3.2.19) + compass-import-once (1.0.4) + sass (>= 3.2, < 3.5) + em-websocket (0.5.1) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + erubis (2.7.0) + eventmachine (1.0.3) + execjs (2.2.0) + ffi (1.9.3) + fssm (0.2.10) + haml (4.0.5) + tilt + hike (1.2.3) + hooks (0.4.0) + uber (~> 0.0.4) + http_parser.rb (0.6.0) + i18n (0.6.9) + json (1.8.1) + kramdown (1.4.0) + listen (1.3.1) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9) + rb-kqueue (>= 0.2) + middleman (3.3.3) + coffee-script (~> 2.2.0) + compass (>= 0.12.4) + compass-import-once (= 1.0.4) + execjs (~> 2.0) + haml (>= 4.0.5) + kramdown (~> 1.2) + middleman-core (= 3.3.3) + middleman-sprockets (>= 3.1.2) + sass (>= 3.2.17, < 4.0) + uglifier (~> 2.5) + middleman-blog (3.5.3) + addressable (~> 2.3.5) + middleman-core (~> 3.2) + tzinfo (>= 0.3.0) + middleman-core (3.3.3) + activesupport (~> 4.1.0) + bundler (~> 1.1) + erubis + hooks (~> 0.3) + i18n (~> 0.6.9) + listen (~> 1.1) + padrino-helpers (~> 0.12.1) + rack (>= 1.4.5, < 2.0) + rack-test (~> 0.6.2) + thor (>= 0.15.2, < 2.0) + tilt (~> 1.4.1, < 2.0) + middleman-livereload (3.1.1) + em-websocket (>= 0.2.0) + middleman-core (>= 3.0.2) + multi_json (~> 1.0) + rack-livereload + middleman-sprockets (3.3.3) + middleman-core (>= 3.2) + sprockets (~> 2.2) + sprockets-helpers (~> 1.1.0) + sprockets-sass (~> 1.1.0) + middleman-syntax (2.0.0) + middleman-core (~> 3.2) + rouge (~> 1.0) + minitest (5.3.5) + multi_json (1.10.1) + padrino-helpers (0.12.2) + i18n (~> 0.6, >= 0.6.7) + padrino-support (= 0.12.2) + tilt (~> 1.4.1) + padrino-support (0.12.2) + activesupport (>= 3.1) + rack (1.5.2) + rack-livereload (0.3.15) + rack + rack-test (0.6.2) + rack (>= 1.0) + rb-fsevent (0.9.4) + rb-inotify (0.9.5) + ffi (>= 0.5.0) + rb-kqueue (0.2.3) + ffi (>= 0.5.0) + redcarpet (2.3.0) + rouge (1.4.0) + sass (3.2.19) + sprockets (2.12.1) + hike (~> 1.2) + multi_json (~> 1.0) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + sprockets-helpers (1.1.0) + sprockets (~> 2.0) + sprockets-sass (1.1.0) + sprockets (~> 2.0) + tilt (~> 1.1) + thor (0.19.1) + thread_safe (0.3.4) + tilt (1.4.1) + tzinfo (1.2.1) + thread_safe (~> 0.1) + uber (0.0.6) + uglifier (2.5.1) + execjs (>= 0.3.0) + json (>= 1.8.0) + +PLATFORMS + ruby + +DEPENDENCIES + middleman (~> 3.3.3) + middleman-blog + middleman-livereload (~> 3.1.0) + middleman-syntax + redcarpet + tzinfo-data + wdm (~> 0.1.0) diff --git a/src/doc/config.rb b/src/doc/config.rb new file mode 100644 index 000000000..fe4d7f234 --- /dev/null +++ b/src/doc/config.rb @@ -0,0 +1,83 @@ +### +# Compass +### + +# Change Compass configuration +# compass_config do |config| +# config.output_style = :compact +# end + +### +# Page options, layouts, aliases and proxies +### + +# Per-page layout changes: +# +# With no layout +# page "/path/to/file.html", :layout => false +# +# With alternative layout +# page "/path/to/file.html", :layout => :otherlayout +# +# A path which all have the same layout +# with_layout :admin do +# page "/admin/*" +# end + +# Proxy pages (http://middlemanapp.com/basics/dynamic-pages/) +# proxy "/this-page-has-no-template.html", "/template-file.html", :locals => { +# :which_fake_page => "Rendering a fake page with a local variable" } + +### +# Helpers +### + +# Automatic image dimensions on image_tag helper + activate :automatic_image_sizes + +# Reload the browser automatically whenever files change +configure :development do + activate :livereload +end + +# Methods defined in the helpers block are available in templates +# helpers do +# def some_helper +# "Helping" +# end +# end + +activate :syntax + +set :css_dir, 'stylesheets' + +set :js_dir, 'javascripts' + +set :images_dir, 'images' + +set :fonts_dir, 'fonts' + +set :markdown_engine, :redcarpet +set :markdown, :fenced_code_blocks => true, :smartypants => true + +set :relative_links, true + +ignore "**/*.ttf" + +# Build-specific configuration +configure :build do + # For example, change the Compass output style for deployment + # activate :minify_css + + # Minify Javascript on build + # activate :minify_javascript + + # Enable cache buster + # activate :asset_hash + + # Use relative URLs + activate :relative_assets + + # Or use a different image path + # set :http_prefix, "/Content/images/" +end diff --git a/src/doc/mkfonts.rb b/src/doc/mkfonts.rb new file mode 100644 index 000000000..deb5ce437 --- /dev/null +++ b/src/doc/mkfonts.rb @@ -0,0 +1,35 @@ +require "erb" + +def font(url, family, weight: weight, italic: italic) + url = "../fonts/#{url}.woff" + + erb = ERB.new(<<-HERE.gsub(/^ /, ""), nil, "-") + @font-face { + src: url("#{url}"); + font-family: "<%= family %>"; + <%- if weight -%> + font-weight: <%= weight %>; + <%- end -%> + <%- if italic -%> + font-style: italic; + <%- end -%> + } + + HERE + + erb.result(binding) +end + +File.open("source/stylesheets/fonts.css.scss", "w") do |file| + file.puts font("Consolas", "Consolas") + file.puts font("Consolas-Bold", "Consolas", weight: "bold") + file.puts font("Consolas-Italic", "Consolas", italic: true) + file.puts font("Consolas-Bold-Italic", "Consolas", weight: "bold", italic: true) + + file.puts font("Roboto/Roboto-Thin", "Roboto", weight: 100) + file.puts font("Roboto/Roboto-Light", "Roboto", weight: 200) + file.puts font("Roboto/Roboto-Regular", "Roboto", weight: 400) + file.puts font("Roboto/Roboto-Medium", "Roboto", weight: 500) + file.puts font("Roboto/Roboto-Bold", "Roboto", weight: 700) + file.puts font("Roboto/Roboto-Black", "Roboto", weight: 800) +end diff --git a/src/doc/source/CNAME b/src/doc/source/CNAME new file mode 100644 index 000000000..cbcca7c58 --- /dev/null +++ b/src/doc/source/CNAME @@ -0,0 +1 @@ +crates.io diff --git a/src/doc/source/faq.md b/src/doc/source/faq.md new file mode 100644 index 000000000..011f3e01a --- /dev/null +++ b/src/doc/source/faq.md @@ -0,0 +1,116 @@ +--- +title: Frequently Asked Questions +--- + +# Is the plan to use Github as a package repository? ¶ + +No. The plan for Cargo is to have a central registry of packages, like +npm or Rubygems. + +We plan to support git repositories as a source of packages forever, +because they can be used for early development and temporary patches, +even when people use the registry as the primary source of packages. + +At the moment, the Rust team is still making regular changes to the +language, and the Rust project recommends using nightly builds. This +means that for now, package authors make regular changes in order to +track the latest Rust. This makes downloading the latest `master` from +Github the best approach to getting packages at the current point in the +community's lifecycle. + +# Why build a package registry rather than use Github as a registry? ¶ + +We think that it's very important to support multiple ways to download +packages, including downloading from Github and copying packages into +your project itself. + +That said, we think that a central registry offers a number of important +benefits, and will likely become the primary way that people download +packages in Cargo. + +For precedent, both Node.js's [npm][1] and Ruby's [bundler][2] support both a +central registry model as well as a Git-based model, and most packages +are downloaded through the registry in those ecosystems, with an +important minority of packages making use of git-based packages. + +[1]: https://www.npmjs.org +[2]: https://bundler.io + +Some of the advantages that make a central registry popular in other +languages include: + +* **Discoverability**. A central registry provides an easy place to look + for existing packages. Combined with tagging, this also makes it + possible for a registry to provide ecosystem-wide information, such as a + list of the most popular or most-depended-on packages. +* **Speed**. A central registry makes it possible to easily fetch just + the metadata for packages quickly and efficiently, and then to + efficiently download just the published package, and not other bloat + that happens to exist in the repository. This adds up to a significant + improvement in the speed of dependency resolution and fetching. As + dependency graphs scale up, downloading all of the git repositories bogs + down fast. Also remember that not everybody has a high-speed, + low-latency Internet connection. + +# Will Cargo work with C code (or other languages)? ¶ + +Yes! + +Cargo handles compiling Rust code, but we know that many Rust projects +link against C code. We also know that there are decades of tooling +built up around compiling languages other than Rust. + +Our solution: Cargo allows a package to specify a script to run +before invoking `rustc`. We plan to add support for platform-specific +configuration, so you can use `make` on Linux and `cmake` on BSD, for +example. + +# Can Cargo be used inside of `make` (or `ninja`, or ...) ¶ + +Indeed. While we intend Cargo to be useful as a standalone way to +compile Rust projects at the top-level, we know that some people will +want to invoke Cargo from other build tools. + +We have designed Cargo to work well in those contexts, paying attention +to things like error codes and machine-readable output modes. We still +have some work to do on those fronts, but using Cargo in the context of +conventional scripts is something we designed for from the beginning and +will continue to prioritize. + +# Does Cargo handle multi-platform projects or cross-compilation? ¶ + +Rust itself provides facilities for configuring sections of code based +on the platform. We plan to support per-platform configuration in +`Cargo.toml`, including platform-specific dependencies, in the near +future. + +In the longer-term, we're looking at ways to conveniently cross-compile +projects using Cargo. + +# Does Cargo support environments, like `production` or `test`? ¶ + +We are planning on support environments in the near future, that can +support: + +* environment-specific flags (like `-g --opt-level=0` for development + and `--opt-level=3` for production). +* environment-specific dependencies (like `hamcrest` for test assertions). +* environment-specific `#[cfg]` +* a `cargo test` command + +We also plan to make it possible to specify "profiles", which can +specify flags or dependencies for a combination of multiple environments +and platforms ("use `fsevents`, but only in OSX in `development` or +`test`"). + +# Does Cargo work on Windows? ¶ + +Yes! + +All commits to Cargo are required to pass the local test suite on Windows. +If, however, you find a Windows issue, we consider it a bug, so [please file an +issue][3]. + +[3]: https://github.com/rust-lang/cargo/issues + + diff --git a/src/doc/source/guide.md b/src/doc/source/guide.md new file mode 100644 index 000000000..2ab95458e --- /dev/null +++ b/src/doc/source/guide.md @@ -0,0 +1,398 @@ +--- +title: Guide +--- + +Welcome to the Cargo guide. This guide will give you all that you need to know +about how to use Cargo to develop Rust projects. + +# Why Cargo exists + +Cargo is a tool that allows Rust projects to declare their various +dependencies, and ensure that you'll always get a repeatable build. + +To accomplish this goal, Cargo does four things: + +* Introduces two metadata files with various bits of project information. +* Fetches and builds your project's dependencies. +* Invokes `rustc` or another build tool with the correct parameters to build your project. +* Introduces conventions, making working with Rust projects easier. + +# Converting to Cargo + +You can convert an existing Rust project to use Cargo. You'll have to create a +`Cargo.toml` file with all of your dependencies, and move your source files and +test files into the places where Cargo expects them to be. See the [manifest +description](/manifest.html) and the "Cargo Conventions" section below for more +details. + +# Creating A New Project + +To start a new project with Cargo, use `cargo new`: + +```shell +$ cargo new hello_world --bin +``` + +We're passing `--bin` because we're making a binary program: if we +were making a library, we'd leave it off. + +Let's check out what Cargo has generated for us: + +```shell +$ cd hello_world +$ tree . +. +├── Cargo.toml +└── src + └── main.rs + +1 directory, 2 files +``` + +This is all we need to get started. First, let's check out `Cargo.toml`: + +```toml +[package] + +name = "hello_world" +version = "0.0.1" +authors = ["Yehuda Katz "] +``` + +This is called a **manifest**, and it contains all of the metadata that Cargo +needs to compile your project. + +Here's what's in `src/main.rs`: + +```rs +fn main() { + println!("Hello world!") +} +``` + +Cargo generated a 'hello world' for us. Let's compile it: + +
$ cargo build
+   Compiling hello_world v0.0.1 (file:///Users/wycats/src/hello_world)
+ +And then run it: + +```shell +$ ./target/hello_world +Hello world! +``` + +We can also use `cargo run` to compile and then run it, all in one step: + +
$ cargo run
+   Fresh hello-world v0.1.0 (file:///Users/wycats/src/hello_world)
+   Running `target/hello_world`
+Hello world!
+ +You'll now notice a new file, `Cargo.lock`. It contains information about our +dependencies. Since we don't have any yet, it's not very interesting. + +# Working on an existing Cargo project + +If you download an existing project that uses Cargo, it's really easy +to get going. + +First, get the project from somewhere. In this example, we'll use `color-rs`: + +```sh +$ git clone https://github.com/bjz/color-rs.git +$ cd color-rs +``` + +To build, just use `cargo build`: + +
$ cargo build
+   Compiling color v0.0.1 (file:///Users/wycats/src/color-rs)
+ +This will fetch all of the dependencies and then build them, along with the +project. + +# Adding Dependencies + +To depend on a library, add it to your `Cargo.toml`. + +```toml +[package] + +name = "hello-world" +version = "0.1.0" +authors = ["Yehuda Katz "] + +[dependencies.color] + +git = "https://github.com/bjz/color-rs.git" +``` + +You added the `color` library, which provides simple conversions +between different color types. + +Now, you can pull in that library using `extern crate` in +`main.rs`. + +```rs +extern crate color; + +use color::{RGB, ToHSV}; + +fn main() { + println!("Converting RGB to HSV!"); + let red = RGB::new(255u8, 0, 0); + println!("HSV: {}", red.to_hsv::()); +} +``` + +Let's tell Cargo to fetch this new dependency and update the `Cargo.lock`: + +
$ cargo update color
+    Updating git repository `https://github.com/bjz/color-rs.git`
+ +Compile it: + +
$ cargo run
+   Compiling color v0.0.1 (https://github.com/bjz/color-rs.git#bf739419)
+   Compiling hello-world v0.1.0 (file:///Users/wycats/src/hello_world)
+     Running `target/hello_world`
+Converting RGB to HSV!
+HSV: HSV { h: 0, s: 1, v: 1 }
+ +We just specified a `git` repository for our dependency, but our `Cargo.lock` +contains the exact information about which revision we used: + +```toml +[root] +name = "hello_world" +version = "0.0.1" +dependencies = [ + "color 0.0.1 (git+https://github.com/bjz/color-rs.git#bf739419e2d31050615c1ba1a395b474269a4b98)", +] + +[[package]] +name = "color" +version = "0.0.1" +source = "git+https://github.com/bjz/color-rs.git#bf739419e2d31050615c1ba1a395b474269a4b98" + +``` + +Now, if `color-rs` gets updated, we will still build with the same revision, until +we choose to `cargo update` again. + +# Cargo Conventions + +Cargo uses conventions to make it easy to dive into a new Cargo project. Here +are the conventions that Cargo uses: + +* `Cargo.toml` and `Cargo.lock` are stored in the root of your project. +* Source code goes in the `src` directory. +* External tests go in the `tests` directory. +* The default executable file is `src/main.rs`. +* Other executables can be placed in `src/bin/*.rs`. +* The default library file is `src/lib.rs`. + +# Cargo.toml vs Cargo.lock + +`Cargo.toml` and `Cargo.lock` serve two different purposes. Before we talk +about them, here's a summary: + +* `Cargo.toml` is about describing your dependencies in a broad sense, and is written by you. +* `Cargo.lock` contains exact information about your dependencies, and is maintained by Cargo. +* If you're building a library, put `Cargo.lock` in your `.gitignore`. +* If you're building an executable, check `Cargo.lock` into `git`. + +Let's dig in a little bit more. + +`Cargo.toml` is a **manifest** file. In the manifest, we can specify a bunch of +different metadata about our project. For example, we can say that we depend +on another project: + +```toml +[package] + +name = "hello_world" +version = "0.0.1" +authors = ["Yehuda Katz "] + +[dependencies.color] + +git = "https://github.com/bjz/color-rs.git" +``` + +This project has a single dependency, on the `color` library. We've stated in +this case that we're relying on a particular Git repository that lives on +GitHub. Since we haven't specified any other information, Cargo assumes that +we intend to use the latest commit on the `master` branch to build our project. + +Sound good? Well, there's one problem: If you build this project today, and +then you send a copy to me, and I build this project tomorrow, something bad +could happen. `bjz` could update `color-rs` in the meantime, and my build would +include this commit, while yours would not. Therefore, we would get different +builds. This would be bad, because we want reproducible builds. + +We could fix this problem by putting a `rev` line in our `Cargo.toml`: + +```toml +[dependencies.color] + +git = "https://github.com/bjz/color-rs.git" +rev = "bf739419e2d31050615c1ba1a395b474269a4" +``` + +Now, our builds will be the same. But, there's a big drawback: now we have to +manually think about SHA-1s every time we want to update our library. This is +both tedius and error prone. + +Enter the `Cargo.lock`. Because of its existence, we don't need to manually +keep track of the exact revisions: Cargo will do it for us. When we have a +manifest like this: + +```toml +[package] + +name = "hello_world" +version = "0.0.1" +authors = ["Yehuda Katz "] + +[dependencies.color] + +git = "https://github.com/bjz/color-rs.git" +``` + +Cargo will take the latest commit, and write that information out into our +`Cargo.lock` when we build for the first time. That file will look like this: + +```toml +[root] +name = "hello_world" +version = "0.0.1" +dependencies = [ + "color 0.0.1 (git+https://github.com/bjz/color-rs.git#bf739419e2d31050615c1ba1a395b474269a4b98)", +] + +[[package]] +name = "color" +version = "0.0.1" +source = "git+https://github.com/bjz/color-rs.git#bf739419e2d31050615c1ba1a395b474269a4b98" + +``` + +You can see that there's a lot more information here, including the exact +revision we used to build. Now, when you give your project to someone else, +they'll use the exact same SHA, even though we didn't specify it in our +`Cargo.toml`. + +When we're ready to opt in to a new version of the library, Cargo can +re-calculate the dependencies, and update things for us: + +```shell +$ cargo update # updates all dependencies +$ cargo update color # updtes just 'color' +``` + +This will write out a new `Cargo.lock` with the new version information. + +# Overriding Dependencies + +Sometimes, you may want to override one of Cargo's dependencies. For example, +let's say you're working on a project, `conduit-static`, which depends on +the package `conduit`. You find a bug in `conduit`, and you want to write a +patch. Here's what `conduit-static`'s `Cargo.toml` looks like: + +```toml +[package] + +name = "conduit-static" +version = "0.1.0" +authors = ["Yehuda Katz "] + +[dependencies.conduit] + +git = "https://github.com/conduit-rust/conduit.git" +``` + +You check out a local copy of `conduit`, let's say in your `~/src` directory: + +```shell +$ cd ~/src +$ git clone https://github.com/conduit-rust/conduit.git +``` + +You'd like to have `conduit-static` use your local version of `conduit`, +rather than the one on GitHub, while you fix the bug. + +Cargo solves this problem by allowing you to have a local configuration +that specifies an **override**. If Cargo finds this configuration when +building your package, it will use the override on your local machine +instead of the source specified in your `Cargo.toml`. + +Cargo looks for a directory named `.cargo` up the directory hierarchy of +your project. If your project is in `/Users/wycats/src/conduit-static`, +it will search for a `.cargo` in: + +* `/Users/wycats/src/conduit-static` +* `/Users/wycats/src` +* `/Users/wycats` +* `/Users` +* `/` + +This allows you to specify your overrides in a parent directory that +includes commonly used packages that you work on locally, and share them +with all projects. + +To specify overrides, create a `.cargo/config` file in some ancestor of +your project's directory (common places to put it is in the root of +your code directory or in your home directory). + +Inside that file, put this: + +``` +paths = ["/Users/wycats/src/conduit"] +``` + +This array should be filled with directories that contain a `Cargo.toml`. In +this instance, we're just adding `conduit`, so it will be the only one that's +overridden. + +# Tests + +Cargo can run your tests with the `cargo test` command. Cargo runs tests in two +places: in each of your `src` files, and any tests in `tests/`. Tests +in your `src` files should be unit tests, and tests in `tests/` should be +integration-style tests. As such, you'll need to import your crates into +the files in `tests`. + +To run your tests, just run `cargo test`: + +
$ cargo test
+   Compiling color v0.0.1 (https://github.com/bjz/color-rs.git#bf739419)
+   Compiling hello-world v0.0.1 (file:///Users/wycats/src/hello_world)
+     Running target/test/hello_world-9c2b65bbb79eabce
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured
+
+ +Of course, if your project has tests, you'll see more output, with the +correct number of tests. + +## Travis-CI + +To test your project on Travis-CI, here is a sample `.travis.yml` file: + +``` +install: + - curl http://www.rust-lang.org/rustup.sh | sudo sh - +script: + - cargo build --verbose + - cargo test --verbose +``` diff --git a/src/doc/source/images/Cargo-Logo-Small.png b/src/doc/source/images/Cargo-Logo-Small.png new file mode 100644 index 0000000000000000000000000000000000000000..eca9665f62e05e5c1c6be6a28c97617e7548da68 GIT binary patch literal 68186 zcmaI719WB2wl5r;9UC2WxMSP4I<{>)>Daby+ji2i)v@iDKIi=Jci$cNdwYz%_gb}n z6IC^<=B%o@Lgi#c;bE|0fPjGD#l?gafPjD*zP>0>5ML#YEMY2Ne^`#fYL1FF#*Qv} z_C`SbhBo>}gyL3uCPoTIdWLRxqefgnK%kyxN@|X3(o!4-HdeHHe=)SKR<>W%KtNo) zuC{sx7DkSQ`bH*Z*4)IG?cKzLW`^9vs?5>=X+=M{kNEonDAc^M+gn4!IdT(!Y5MOfSlLQT{}*FxhyOIxSCi4X>e0YPd(!8%G-lQyW`CK}BXlX*~lo>%aGZyXW7v6*96nb2c&*vA3}z z{8#&OnEfyESy+vk+1L$?X!Plg=xLaY84PLI7@3)A*qK?`4UOs9S(psiiT^`y_}|*? z-}d=c@>K`he^lWxVqiCB)o0MBVbn8bruk}5RvI=I7DgIlMneEIfDORT$VN|0_oX7; zUz7Q7CiG9ymtFq7{I3D=b@N|C%EE}ZVO_%^E7>XBJt)$U}GB5`gh^IMBZ!mX0Z(PH9m{c}Cu6k@~2opi|(K=n94V{*? z^|u~wx;(mcH7+)H6;?FPRD0i->(Kove2vc0c|TD_H2nJMepvuj|N8lQ#<%zv09p4J z^?u@4@fXwWPI&qkQ;k3J-!MAdG5^B+4;KHy{Qt1{zs39y7XL%c|IK14`C#lddRw@u z!tc+S9nidgEez^LQP2Ai#MsYg9A$UTca2ipfFQOU_D=3j@=fdby=@C}y0L()N}r0b z=(?e8F9@5u4|d0H=MaU9E%UvOgWs$&I>1^N z4_l32b-6F>uZ1YeekJvFhDZYHy)+K+nQd`s48uvy`DHWgW8xZeovsl)&ZuVE2qCn6 zxkR~1>nnmtx*Z!b=k-%m3Gf8siR0)>{?7C?d{Snnx)pTz-Z^w4ds^|bb(8mEP(Chm z2#!zQpZwcX-=0FS+6;UG7tGv8JJZfYu)3Vvbndk6@p4LI^E)27e`AYH@-n$nvBP-tSX%d%}_hft#0_B>ubW?_;FX$FFaICCd>sYtlsnozWc zN4N^*n`(aArlAR=&@iDS2W`90uD!#*G1*KvN5gZ6| ztaLaEfl!9R)JHtS28gYtUU9&|_06S#BXiBkhEJ6Dn!4QIG^P4fGn5m^6@8fVJ%|z6 zns9J=AF8Vs-FiNY9HHA-rmgTQ3Ez)%;Jitxz+Fyi=U_nV$Aw$4yuMHON!Ra6?*4m~{C*DvaA!+i5>p z3(|E(A|^x4o1GF+Ivjz~sNT?cVNb9~%TZUDeaw_`7x||WsE)P;^pB27=W!RJm`?CE zcSHJuvm+i)fvJd5zwf}bz}g`dlVuRmooyv&H^Y%>pO|qiyeiMzUK|8(d27L;9OUg;Ic$XBatbKu-f>hMF3L5v4;+=HD3)xfIatZh)T$4TwMuWf)PqMg zMPB1o?A0c{;38x&#^m|KLq{z*_#X`hzWl+9Oi;m39bD7bX5*}UtUiK@7@t6Q+p0JA zSB#Y9-UL2Z{7~jRcMUh*EU@qsV%+VhEJeGA!n}7M&$l3uzO;7{x#h9bBKKRhe}@jK z4iQ$>oKPeDg3zc7G*0YHDJ261!=%)JtH_WrP?@juP>5MnDbn}(?OQRtpb+Md{H|Ym zdpi9!*IH2eHbM|8n1*V!wKjyHKge92g|>e=hG1d=OG-veu=UJ(w)<#`R&VWEK?QQG zfi}MBS&X~jD0>f_^uETFzGtgzb61Cdi;lmhZ$#wAimBsT)V2bX0x2-s=(Ato-@x`h zzXpWhUgkTPRo2L$(LzKyJ^Wke!f0wz%Wq^xUe-{=e4}Fxpd4+Vi@of)*;BE=$4Eb& z#FA;xF8d!I5d4$$fEGfjD#K<}>q9K6FRx|xn933UvH$}-zFcUcftCgCDeOoY5&UbS*6BkN z_>t|I?3ujpoTBcUQ$yPi#R$sei?}!)838YfVRKNWI*}N4(-OUCHXv@{=^6ePFW~F z2Xfr~n5wK-SF}3eE?RJ%degG9)`QHE$mImND(}tu-D>yeQ~bS+bn-?ui?qWH;>X7) zNd3wgtu(fm48a@uCws@ev<~#`AZ1{xLgkrfsOmgzO|96>;mDT@Sc2^x=^-y%y7`G@ zZ#*FM>$s($DVhFB!T=_)P6vKJql=)SIi&yM*anM+_nB5}%RT)(tupEM1M@*0n%e-` zS6|lRtc^udl+T=FoTwZqc@de21IFkWHpL=2{#I-q8(8Gjcm7*`IvcJor8-7svM(Hpa2UUsZXo{e*C(@dABPA9vzkSSyp~X@bvL~jL|i{cvvl` zohn=L3mg_szv?E%Vp4go%7HpeJDoBGF~$>)iy}vh+BkyRYnzHLD%VdK)(5q?7eH_eRI9X`?g)} z^VHe>n9KW|8123P-9_!9ciV{TsZCCSaO>%$c)YeWNBVR{?aTAK`=Qt48DnTqz#z{U ze*Z@CODLhAV%}bCq}#FM7U!dHVZ-HZn9k?*vGYFhl5$};9o>aTC2l5H_+jCh;XANe zl9@4crJe5La~?=NAB>fTo}m;nd+Y^RL#WU|z1UQUUpYPp&~N;G+*@-_&q{MdN|5Sn zG_GYRze@0VT3=?fCrpr;wn8opo+eFT1+is<(>Izg-6w6_=A*lx|I9|eJ$8TQ^1eK0 zdu_dbUUWa*BWA|(B^MCmWoPe(mCeN#GUTMX0?T|QTO$tYUhq<*Iv2z(PVY&8^V!_Dn_`2=?Pk0_0+xKuJKeOloj{U6B3Kd zwVJN>V!2|YD6qc1w1pt^LXbIqH9499gaJfcQgk75O;}|JQ8pI{wqJx!y%q>{RBH~O zvUC~GBFWMW7F-#KNIytjo>0QX^}7imdrH^))~qBttK%sdpXVdg=1D{6+KS*~@jbh} z!DzEvsH{{fYI?Gi#@|D!Qn{8bSHHV(_{F<(**WmM^)B3e#Ts0c;9aMe#X+W^oJ14O zjS?a<%Fo}O(W<>|l_mVLkJsmD*ZCoM!93Tvp1r~9G`*FEk*5n_Y~Dzqs?pR zj+*5yG7@T$;HcMRZaM<7=6G&auLE6-t=8_0JUlJYh!Rv0bBXn_J5#JUjVetAQqR$m zQ5Js?P|_i|zY{nm!S-oljpmfD^BuJmVm4SkN1$G5Od9@*uA%i zNx;@fn0Xb$(wulU5o@ckt&I0+0r6?R@=cT>TB-9BY8 z*0fPQu}H()0b;T}N8>};RK?@Bgrn<>E#?u6O~)_h%y^Q0+_FBA5_3;lamK4gP31re zwgnmWEn=KgfhrmPSavx}jU^$OXsY0Lxkv&C<~EqNb$uA2T!SL?9QfKQboB9Hbu7OF zQ#k>3^eE|LU=X!IATG`h=tC&&`!n=}vS6AxwTKX0i1{DYDv~9tRA3XHfzw_gV`DD5 z)Gw_~I2{CLThre$y;=GVegsKL8}XPFy>O}jHMQKNYhsTf zPu{xb>XV977spYX;ue!3lASDj>ECnWQ=@i!uQXovngwtPDdZEBLLtVQY8Iso;*-m% zu;h_W!^cQHP@1>)Kr2_sBNUFfnnJexfr7@+lUS-kG{EtJQDD9!T|*;X3?S7N12YaI z+_B@w&>8sN5PycJi8-?R4O4nQtb?jGf^FN(;6Xc4Hb5lVN=*HFWbnYMmE1pEkbAu6 zPEJ^V&J`LhR3CSwAq)O~a{ngs_&31zD#gM&h_oCI^DNs}SF}lYerB;!xjb1t&}egJ zK0{ij7|ncTA#(O5R1Kf8DG}f)sjqSh0rpkCU4)hFWe#!>D}8scwA_W*D!E9-P?b%* zwvxa?jSrvb2!mz-NUWonI>FwI@yA#oJL0;|S|}c|;VW0nK}Hf8(hnfj2@$sj&acV# zt@J9+Od;k{a zvp(@gRCyx+pDQNFf~}E{z2K^MckQ#+_47Vw_f$k7m#kKc{<#N*(%uSa)^W*6k|47j zu@gs|zotbr=UF0kW?gJ%5TBBayBz|>Q|7F!mTId4QoY!VNfNGmdin-z;W~KS1&G-9 z7iuQC0y=@p38T1IivtDsGYF*!kbN~P?gLd-|F@FeB8OWc}?C+_8M;ZZ2G(G zqJ#dmFq7f=Ftn7!6qUsFBPNqiv%ki7Bm}thfiv>(TN+R~Ydj zfgwLs5h{mqjha-f8+SnN9wVl6R!>RZfY)HPRVTXCnTMl($q^7MjAkTLh{qxPVWzR* zuZc8rYpb=(3;b z+169pZXs5O7`=-Xl_zaU3-^5u8QPN1o=G>>h++Kj9iRFpdEhcxl@>E#cLIt9_U9rM zeJ;=}OGQGgsB1aHs>nT6{34+qwxJ&3gvKi&6MW~u6SdX2V+^7YDt2@Dj^H%G?uX>f z+i$+#9-H-)8rE^d2{C}y>nRHJ8-%E0bHqNTa3oHSmW)|4bwl0KmQ}GxF!`;C;gmdn zgj~E3q7PNBoWdKgZ2wyX7{Y@_pWTe}~_?V5F|(b61H6 z1Vw}ZeOHtbAR@}S$5BY@=bWy}AVl*I6p%t0l=w*kMSHgH7-cljWcS*Rq@w zHcDO=vUR6=w?7M7M@Wpw^dPp!=iM1DKq?3ujd?+j!kvM^wYBk<^E@3j9-Hu9jSiM=s!z$}sAmx4&;xLlTCN!+ z9vq0%Nf0QRgu>PHUdcFF&^G9m>S6=$eOc8KBKZ?#U|_}bVh|r&mtr9u2&ss?u%FjZ zs0xtcdo0vlGPa22kXFD*FG2?~;doCMz8RBG_n#e^nPLXMwh!sC|9TupWL}1 z)l?h1U5~4%UQXAYz#4MOT*fk)O{I;fI&!C32H$Vy&i z<1P8}9T@$6SFxBjV^k&wZNj%~pbT_FvV|tBFSk;@+b$=vhV^FxFN~c%Sb>!P;#)6_8Gk}8w_9|hr zlTmK$7Gha$%-MtL(`Eb4kXDvXFncBYgP`k}z(k=D3l~CFl9nBCw$KyB5vIvcHTHT| z?3YX27&&9?r)Tkx7_xCJf8kM%2Cx^+2O}xgTT_byjfWAbap(Bax|-%M_qB5$QkL)H zPbak?<5#0#=I#zqj3;gB>0RSlDRPJMJ-|Nsz0X(RdMeGE1P?cHNewcua1uU%>c2fp zge%3C8lEKHTPaR`lo$c(h_sbLy{t}g9*vs(V2w!OB2~oK!!7X79?J1YwBaHm{2)^0 z9D;R4woKj{nTuQ0DJcN^Yir%UTZ*Z~LKBjLet*B%mdpqaJiakTfY5wAbG&#dZj*BkCFsNA^r!H1mY~;S1(N>z!)$ z{n6e;E@v_i?xlTlb+ofo1uEJm*hjE*$o9vrb!&22jxiwx^ zSZ5B}?+_j7Wn`tlli5_68siW!^SJu8l)Cty2HajeH`0gzJXC>geG=>(reg~hzJmaV z>?@**zn7GQ1+sd5{3BdnG#^=MVL<&SD-~D`T3s^&DXM9} z(<3iV-SpH-dns0OILNYqJlh%vadSpd6?@-p|6Gk)a86E6AP>Y|eV%}WGpMQJVL*ul zW+b_srA~zff;~_TDer=(47+H%cr- z9?YnDP}zuIv1Zoe=f%XTV=@<>5Q#(?AjC5Yk-*FzKDkkVWk>WGoi1a9Iz?`sJFXL| z=captc1VOlmm*9bFK|3^66rBe(;2Po^3J(( zSxlAeE^Y(B@|2l-!b8R_LhonnS9zpT z^@gY-WBcOQutZS=&_o=?V$U1w3g0vX<<#cUi@p+0oDE|Ks5+R^dG^-OhyD|!i83t> z)HQ1O-YZS!@gKnvRMxS?&oJC$n2_2Gv@(3nD8N>x8)14i%(bQhhg)ty#{%rjk3DgS zX{Fah;Y-BfUX^2zm-24+7K?CO9ts^VtjR0=uv|3WmPH*lExhP{%eLDLXDf<}L41utsxSx-@tT7LK5BfiMPAt3v8Vndn zV(rZm0uLdM!5hjQMv_D)=9K9DGS8uvUX%3}tF|9@h-`9Z35TVb?A=n^VzxxC2G?Bi1KRktfOL^NMTaV^;OHH-7$9+} zU$C!N`xER2rcm$M+vP!bg3805uFyB5`9S^UVQ=HBx5au+H{erLAP3ly^}nYasljaH z;Prt8_VG|5B#MDt4Mx{ND@fLl)e?%w>r2+Y^G&6cwr(oUvpg*?pjX^n@{7E3_v_!c zR&c!ZFnO%JnyfT_)+oGQXxZxZ_MwAZ*?ew6Uio-krgdu z^)MVv=V{ZC*))VSiiOosA*E*wy22jX!OiX3%5%$DydT!jWBd+RE+Q{`yk=n=TbYT~ z-j~$vA9N-w`NO|&1}9H#T@=PiS{s=h69Rc6p$?*(!lfqROOLU>W^W(E<357TiK*&r zfx&?J;9J)5)gIRrHwc6NKPLWs3!-Xvm*0c3CU;}7erm|(Qc7T2D$g7PPoTrd{COH# zfH9u-!mN7$Vl{;~7#M-^lP#rmT_3;Nqzz=QDx*N>uWX*nozy{}9q(qggJ}umT^HWI zWd;9n;3VZP85NltZ(?6DPpl|p82+qlS%0mZE{(6~?kJ3MXsXJnHW{tADRr&GyzgBD zP<|?@u5Wuvl+$)aYq$kf%j6CKJ7@8qhiS;pwib@kADxglwzoEI?C2_I9M#o1g~&Vt zg!f!|jDL&7m(-yM8H&Tiu9Nb|P+VE))gZqo=x~aAKaOnk9HpZP8{V|o;eAmoue%73 zxtXb{*7f4bk-R1)A{Bxyf>eLq1YHS-nm`@!7SlHX)4e4oYSgit1nP_pvoVm;qW@ZfTq~D5OUY0z}V#dgCO_-XIrY zX#(qMpF6qDA<{zE+f5v^R2;K{1$T>WKG#m8Qj>Fh7T(pMeU;tlDQyV`u+qNDeE^4ee&+3Q|W>zKf1zjiS6k z7M+aMs7!C@-bQA`L@*op`PngXj@T93`J=!N(h`mSu`yxuq|>7F}+_07Qm z!vL=disua(KPimSSTr;2689nhB^Uz7=RT+h=jvYlg+6_EkotKP9tbC-gavdEgAm`Q zU1Gl_*PEf;^%xs@1#wdfq8O5FErAVa^^NzTcKH$@5Ub+l*2D?4aC=>NW&F|I5Z7$8 zMk^D!>BE|~cXc%*3CC!HM-uNON1x!c<-yDBQ9jJGfnIt^C1wX)KAc(z7XAp-7fYX80M%M4aWpkO!_ zsqJiTVIOEnyKBPn{MJ))xBgS4%{xK&dH4JBq3p*X@9X*S)?*i<_l*lpIEZS+Eo07N z{96qVw8W_s_eubD_mKyU4w%LD8-Zr$ZSJFIop#olal+$?rp)P3CV0qC50pu30hgliz_HU>{kf{TH2 zOOh#B_`duz`Ahf+5EBZ^B{5zz9Gkz@=P*q>zi9<#^*WOu+Z0Wb!8l>)bNDcPtHS06 zlwlI3z)_GWHffYOGefS9q?)r^{(-mpX?lVU48P^k1-mfign6zRWX`5%+cf#@vtnh! zuF?Dngzr!;aWfKhPv``kR4#v!^2G26-KB@HWZ{-`M&TNaK(JCOGnSa|Ck@yoSsa|m z!+XYQ#Sa)2VRB>7EII3B782En8BIqlI8E5q$oxONTrP5-^VOb%{RBrjZ(Q_}(q36( z$`aWfJ2(}xE9xD?l zVzGCX_xh;^7cW6nix1@(43x3A7 z*1)Z6-vL|2H6kwU@{lib+uarGW|Vp4^hd+|Vb6pOz`#L@!o@3t602GCxrREb69t%3 zOLKsdf<_zA;yS4|G(T-HZ5I2y0zE)+t$BF+L&^k`0pmcm^X2C=qUt;+FTDGeMq9~d zc=miX(Nh)`T~j0Ow^#F8ld;9=??>RZUv3iEm|>G9FiN|6fEIC1&2oM?yrCy3Lt>m& z-Qi~KM&vh9fg%qrQIc>QliWxXQ2*2d*78e2h|hjM-g25Hf0GX~I+Qc2JFU#L)=2O~ zZkY%i+kn32?nvMAW=QQY9T$4oH4AS0dt7sz+4ip z`xN`(V3QzL@D>Uw;u~zVz^C0!uG`nIpc9}|JBszZ_W2aEEKlg3RZYL+P z^0R7VmbKcCMHh){V&}FpcCrt-kP5KRw~MlSj^>O^S3{OJ?mgWHI7;|K9}&q~%qr7U z&3;ZxQ5+U%{xW7X2Z&Z+;+WfCM$ERzH=4;TPo-mTG9N}r9npg!*~;N}beN*8*XTf> ziuE51RJ!7m`nkg29-HhO-8tlp!2&jiXB-}}v-a@2yiO7|b)WwHfvQMDFSF{^v$t?XRMRerFxkH10CZ1pn@y&yFxZJcO^Vo=J-g6ftAy6$IjR2xRe-DH z*eRNMFQiY7t-9n}_+=?kkWV~s(cN43tlNFFl8X0;bHJl>+l%tstJTZ&hvy`2k6K1)x?WJ-ufbpg3W$M*hub2FqXy%wcU<=X;e z(4hR1pp1TUOwu;DAn6SBp)#K@9VWx0(0 z`(wsY_zZJZB0|F&(MgZ@?hFcu;0M3PEJuj!un|;Y8DT(`;OY!IyGNoowrf0 zt8%tiE65VoPGoew4}q*V-$?2jsA`;c=rOHy9N7VII*j(1MAznP_R}XTjzQb%4$I=c zLk`ThFkx1zgf*DfRa4o*Mb0QntPT~iDKT@k9A^13E*l#x$ZP&BS0}n%6dU0B;w0J* zQASvY=6)Ed5io4hnWz* zP6HHx=6eyy$&!1U-&&|VA@0rnzzotWjioeR64Zwj!}%7(Wu${$o|ask7%;|~U?CC~ ztCpn~l%Pabe6^UIogZQwHG@g(8V1k6lAPevC@y5ED|cO*-1jKoCPzF z{d)^7gQP`O9ffIZn zn7r*BR-%7$6WY@0nSL()+NO5e!jL^e02ssrx3e6#qx9U0JHZk)ix4_L++AKVU5+-| z1e#wew}@Z%=&~6Pax~KWX$Q$sNFhO1i!)ZmlRtPiZSof1TH``_O=4{-320mO+qS^w zUw_~Bz=fSh0;)olMLpCO9sCC6o#kZ75BcmLs{M{1V+bXlk%Zd#Q)^cx)@+G}P+*;6 zU0PGIQeSITh2KYqkNXuBH`@~(_?Z~arMlnn5yqQVgL-~s1-jW8R4K-8k*2mG*s25i z_p%srzZxYi>Yl|6vmzX~jV%T+yu2QjeI3~2iOYm+ensgNBFi04S8&?W0Ko#41t|qz@f?Bog>6IFX zT_D2<4AnY%PrXE-}}e zPM9(eNGWJ=VWeA)>C)YzR zQVGCNraPg;KMIgHWozTw>W@H#n~UG+Icy3_9L*uCp8JH!q8*<#Xwl;ro^RH|R;uZ$ zwA}W5O2^NY|DO5v+DRo8BOAsMp|hZa_{)1T+{&|XCGXX*H}2{lCD3F+E;s{xURd>3 z&;jeKkWM>vFJ)vE@V|A5E`|VbOOMCvM#tq!aF5Gt1a-(Exp&x>3S!V61|6D#EVwH( zExq{Ec}E$a-FaMSAi6`9l9-Ejxjk$Taji4RmQs0CmnF!4s}OWmQXb-Ap$|(x1xs?8 zD(h!uUWr@pq13TOvZ})M?%5`?y}nJ|YT-9Ath!+a=W_?@8FE6ISIzrbI$^VAE6C^g zl}+T-kr<_Nri#>p2S`@?oq%*D4_cW{W&J_$$HmGtE+@jX&&m71*w8vvFM^Le8B0|Y z6EoYR2Br0F=>lVj+}B5_9bP$R*9K$yux`@pXl&L%X!eH6zI(i;ko|j#^$Kc?(_>Vq zCCoRxI#Zs)GyfA>(983P6eHtgcrAT}rV6PEK3MS9;bG2Ysy3#EAswjL=t0N{kT#(R zM+Z9TT~I1manAsIC?*Lvo=tFC1!n15GU{I*O5#nL3_mt~O>ea~2^)K$Yg)V#w2+D? zvE+Z_%xT8R{?w87wCu9TZa&kBp5;b=6{dyI@xnAcF9JtmgqUMh>v%M*%R zG~54n)(G<~hUJ`CuGe2+JWrDW6NS^jYPBw?Lr#w9wonsGIf#bgJ9k^y*#&aR$q#R# zX?{*G{MCb0#L{}g1te9~RIoxNeXspYyV1IlTDsZDMBGhdy#Z^dI`Nc1f4?YrCBVV<7SLh^2h07)`tQhz9BR?)+M2R5YbPm-bs^jS4 z&7sAud}dB4Z^9PtV#zY|{YDp&^#o!6An6vazotwhlU~fu!ew{KC<2~FLZOzCCwV?j z8(tmWExR_rT!lV-toJo&_H``SH44xFXa85=s9Hn>oenb>zE~^o>@cBOk!ml#hHB{QNCgaEYHU zhehl6TNfm0kcTPab+t?E zb?7s<9(pv}6YP~G^SZH~j>!Gpco?w~_~^xGV}npFC8dGNy$<~(-{3Q%5$a$o*STa*7p}k< zetT-|i)U3ZiXWjFk&-E_1DP+jTLtb4B$>D1Vk)?*CZPpKJD!14%kYAW4rd2g+5!iA zMEANL!Z6UE5SGw$3Cjsy+mKk+lpu}L2153OYgKg^@(K|&)_G=EVifZDxVzAZSnrl2|4bIUla>M4c+#bEv>d zq5pir_cw}F^L#M@ms8f*YpSa10sPZFWVhh%O$pMumWgH3xz`LyLh0I!B&U#mJ$ zxY^R*yTut)8sxbj8pWJYy#?vThvn6ZmZ~i9muy>z`uw>f|>FmTK zFDncmyHodk%jjG#DO+cj#HgEFSEOv<%0a;7j_HI#58>*Py2K3A%67oK;SX)*bzLL) zWo~zvu~U{>LsSFrD}p9yA0j+MDS`ozTG@-K=GQ$w!O9Xn#MSW{jLtRad z0$WnWvC4ZMPaZTUCfy_*K7a@YYPa}Zz9f_dr4-6k{&UET0f08R7PePZWpguOtfg|2=9AijZ12jv zY@c{n0Nk;B${8=nf^N2YtU!{AGIPiwJp3t=$0IDyL* zD~Lwy&x|YrheN+9QP=fTOF!uy^LjqQ!D&K9SW~3+QphA)ma>`HNq@SJl)r&ZcD&)D z53FMK1Ln`6?vQJJBq~k$4Lbi-l7@sUc;IqO9e;bFGmBjT9%~XE+XH!z#lt_>WjQNx zOE6JotD!84g2E6#y#1GCp81JZ*O-grXEa*z_~Rjc4N+tgOqc*hHIP&H{Pp3GW=$$4 ztc2;jMK=)hChK%B7Y(s~5K}-fi!tfwGt%UU`pR^F z8!J3l1#|q0T6htfFFn)z%<4WdLDmE{dulem*}rL)SLxN#$fo{m$Oxx`3?|o<509sP z%%!U4=YILg=5=AaIzatEd*k?Xl&5bt`3nYnedyk)AD zD?(vo?KHh>?<*h*CzCYcE`J5vri3z)f6s(&&g-{s7Hmt((KpE!J}tk5WmY*LIJ$N- z*?dWBZ?d&h+-DW4lO^gN!|yX|)q%5v)nN5p{x5gXhGx^d&(kYA{)rdfIiUu==9S97 z{Kiy2TWZrctn#sPGupwfO4lqXbdQ#WbNZ0BBX0GSh2gHysjWAB>(fW4Gz{de38 z`QrzX9^>cMCqX#42OgONS0?({)uD(SaH5)Y0sO&B#2V$7J?1hHagqZS;Jo1wP~~!X z&X@7a+J)-K%?wJR-pw9v|4q=kR^Bt2ke;ci<-Dj|G5F*Kn}`{@`O=&+(br*82`F zgZDn&H45^V&l47w>N$ycFoWGiz8c=>5&OB{l9lIpR9hGJ4%*{tYp46rFapNd@f=5X znq@yOh}|E#j6IxaAd&T>cefOtceac_t~<+aa7}bP!Gw*&-NRKZfK28mhp6dh06uz6 zC#MjflC85X$o3!9bNLo?26Cy8=;I!2d+?e@eT0ow4ll^>u2KgH6@4i>wS|Cumm99GF zE!2%2^ftivDWwV|1i*|r6fb>K4Pi5Ef~PIp7HMXtQ9Y!fQUL zN$jN)je3d~k`;jm(kVFSVFpJ{QuP1=e|1t1tAoRiew^w=REu_{p((a>jV3FdK2zZObMLIQhO8P3WdlVvmj ztNQM6rdB8iQ!8+1(P&)=<+8hbpQydyb&L!1M`fI+hM^%7-vEhMI6o1c$6CN|t=xkB z0)}J*%IBvcM0628oC{(cH?W&)IopB@+;3`%`pxU@K=in}BcT&5FfYuwd(;D>KqZ0*OsNJDcd9);+@dNu_!5AuYlQ9d!L70aaFQaq% zkZEHMBUx5-tV0b;YBTkMic7N?ii!-Nho^)W0WH#prw+eLJ8%mvlfQNoqml+Fd2H zoRpTbGq)y>l1@x@a_zbe;eQmif)mOkD;u@5zm0MRtx^iEiK$Q$aT)8*g5`@%t1EX& z#uEz6Kc7vyIgQQc9BNw!wm=_`mW~@Am=^b`Pm{WI5lR9&AT-;4|7TNo7C0Q`{TuAp zD;}*;gtn8@vR+Glv}f9zMs6ea&cQxYL>A`gLkd1*%HKzAq*rQvWVJ>XUg3II6YN?u zyP%5?;WfClTG;}rFv_;$h@$`X#=;W^H#e|@J9c1&S-Kojm;Kc6%Jz{ZRR4L1Zi6&h zomG-%j8(MNVMU9o{^4HyWk$txrjP)o{S*WFpNJN-_Q(KXkY#aVu4|C^AuDoEr=f^- zCGK@dZf~%=BRyk9+>=>$yCclXVrW@$1bQs^7K~V5-=1i-W&7H|Jq_8ux2GR7lgO6v zXj0C|Id^OTK7+i7{)4-9_6DcP_>{1|#v8TF9gmbJYw(Wh%2p$o9&TPoxhKu6!1%c6 zIBRgdBI0Rt&LwN1YJRu~9!7JlpNmiIx@x@ZUSM>z2325df4-6v;nEJ^e(!UTzm6KO zGbtX1NkR*+fnV3((uETh6aWv@M|_ALzApD0lt>I_w=YAuHJ?H{-}61>m8y@CvQj>$ zzRMjTf68RNXsji-zKHFh2ANfys00gAq~@V?3{enej_-fRY0#Tfvg)C__39=_$B}>{ z<->+p<(M(hJ@dSUqi@vTri@;T7T{TS;ULr3F-(s+iNN(m|7Mw z^;o_bgEe??PIqS^oG;a zy`No9f78&m2#tkK3p97LUV-i6Bb=*sztXeGuiXr>9=T|jjj{bF1cI&&TIam?u$pz0 z82A=>H%llQW5nC~hB9CU&yJZEk1Hu4rTO@+>kY{(*&m&PG)&e>^0Dyyfx&&|r8YV1#dxdPEl~&6fr`b&f6^9~ z`O5QkrC8L%s`rNwRMVha5%~r5OF+f|$+JGV5FgCkYVB(Uc@ z3~H*rR}Dq!t^G0TmN_kkSPt>%cf(f}5!iSTIzo@5ag5V>ui+(jT?Ti@Sh9?$(7can zzdZ2zUZ+SE&i&FT!fU=ONBD7KFbQcVf*abgNkzKzVbkC4cuejUIW!?i$nZza!o9{fQtgqI(KYd+w`5I|G zT`8{l76>WM{Jjjv;WB`2Oo)XT#_K8*d_p2Ia4M-Cl7oxx+lN9u3#;B?!aODWlBwQc z9cr1gv(+J!4U=+b4lpSxr|bm%zE+hnE{N)0h^|FLknc`|Yx%qZ*dQq*zjQWeqqZ5O z=K9``s{_bhfN8986!H%PErR<@g{Vk6V|5O1h{YRiN>m-7reW|yj8Y1I64j&hlLL(R zwrM+3?H!%5sY0g1*xv96=rxC`iy!AH7>6MpgVM`ySYUQ0DV-G0^t^;BEPRJv(*^E_ zs2AR@p)F|=2eA;p;Ar{3c2gcP6&SMOPK$WGjRv2a;z&hT8xlPXBdygyNJH>n0w$3bbc9 zr!+(jkA(?;Hv_xG9iuD z^0nK_eoNhEmw)Ao?pMxbtZrYM$0`aWl2cfs9IENyU@c1QTwHexFcarM81NSZ;_6_1 zTS-Ob+7EK)jGVq6eb@E)8wvN)_ZJ0$17jZ8yK?;;exYnjW>(MLg`nO?MFg-~AU};s zm5=CJb?MKi5`LfIm@-Si7hZX*L^Nx44Nfm#?;JXV9eK_6jfz{^KxMTWCTyMvL{`LDUW8rJB-Vxu zL45f0xSc^>DJ-SLnR<1;99r@wOgOF>C3PAOgy&D=%`=Fe0QLKBbZR;p!^ET*1tha~ zu^)g*Ji`|NKk|-g`@BmL!0{ zLeOvNKGuUn7Ge_^5_k3ZK_-*4)@u9nCYj#${BNehe4fPmVottE~_=< z-YgL7Nlf(v&GU$4oK~y!rnAhgupUX`-e8UFnUm6P)L2~DBK)G0^de;nVO<{{7K}9B z*bhfs?LTk0_m3+JsW!2pw?xOx6priIh^d`O0t>>F(~m&hkOGkN)98;ONRos0cy5x zli$AQ;X~TW< z>>+Bya^s=n{b&Yi6DBc;&AN6^VAM7r!21UX`;@n6VrV~0B9hF4@E0_vEd=*<{E6~9#L9iauPgG8imw$e-V-S zZy(@VLju--i=|A$jjE>HEYj`ArPqfDq|d^`!G0649aQ-iS+AU^|BMys|2AD{YuR_& zMbW^;-2#6IDOcc(YoWqvVpGn7RHvXF;dm#CT5J&jAqLjCP zeDEU*3Zl=atG?k7Oo;`pg4|}fASak|{tugE2aklG_y9o6BK0^q78=OvGZDxNYU)v( zI>qtqa&Dj+F0dZdG|``vhA@a!AU`Jt99j{$G`tTl_D=Y56QA@0Oti`M0v0MK^e})0 z2TbDrIM@u~PzLdta_(i*-^1YOWAC}>)*x=laMOVZj4LV`;hQQ|)BB^K@H9uMG z!V27Nhjr9e%i`y_Iv)|<+2zJ#|m?#EVOmf7O z)>@Ixa5;8|h;(SMYm0d5AfE!%09py2|WJ<7R%O(nD zUd+Dm{^OfB;Pmzr0INH&Gcs^#pTKLx-2e;dwTVJ`6xFs}Ovo!geAnsK zVooa$d8at%Q+qlhe*OGjm9zEEc;Y!tTc>>8ko9V=EvtrZej7jI1+)lcRCy$MhGlTf zeAj%-jFf<#M95BSCJqzne9^npSzk=~Kp?()_Sd0oo`+%P3M`7}AH?6k53cvvq%a&#@b%l->>_e@TZN|b)1*tWIl;H@v7Z4r_9i3Cgo(b55w`x5KL;AogKjZ zv8L)7ZB)~qd0{B|Ws!8kZ6nTo4RSUU zB&h}N+^f?%1b9e~ZSFu(4oE*cF%SHJrsdHzwEM9m1{&CuoRdJv# z-QJo+H|D`i`BG~b8UnHZGt3|8oPxozJ?;Gel>=Q(CXL86JD%W#pX2-lPiTP`i*r}O zL;!OV2y&Px{N!@csoGE>O$*C(zBiAS>{_wEormjC>;`}^y3aXhfS+;M!r0uvu+p6) zVR!aLiq{Ihc+t`2#%vJCYHt9UhO!T2$+8Es7YT^@{FafXaWXk1c?0zc5<95p$Sh7V z96AA`2kh#)yN@AZb`7QoFth0qOsD4<{*9ojMhs?DiOVO~x$?-fEL#LGn(ot{b4c3p zgl*TbowL3y$LE&JzDPC!7>ZHD_Ti1EV0Qcz*)oQ6RNKHqldWCh3PHSA8dL&Z4c!=frA0Fvah ztg8@&^B3@0t8k`a<=S~b3}+$sT&{tfZx85mWc|ADU>2Lj9ZQi>a6k>ll*8&MXOkfS zopa8o8to!G*n;idSHN<*~EXpfw zjcIUg$;^#Jt4*ii`1lCU4?n@<%qlg9%j1GWHA;xLGC$JizC_=}gK2#QQZ~KzzFiU? zbzbvjRaDW7MYfxoOy){V_M zye8cn&DHF@=*&lpj@9XVu%b{sj1$bK3mOI2ab@-3q=qXO@_Vo<6@Uk<&tZkaOY#~j zWl{HL=(42eGZbzLH%UDmap%iAJtOPa{RT1{EOVS@%zI*W#%rhyS1U=>nHe{-tu=FK zZGnKcjiKNKE?m3L6&lBy@2;{+4AQkV+o>1}4DC13U3P{*XFHr2hHtNqM4u6UM>P zkxVndu~`O!cwQ9T3Ba~Ms=^;PjM%L1;DgTDCP-Tc`iupg127Sd`m7QIuTC2s{hu1v z0Y)V=HE&~BNxHl}45`aPN0*9}mBG4@RYFb+n`Vy*8^1@M%~hA3s8(n9=2`OC7=HK0 ziv7BuASPGQU}tSve?GVoE;$hno%Np>Fsh#ulkotq6x`v+Wdw8 zR&~idNvF(LcRyYFOti%_RnT`J&^V5g+Q{{r0pfz zl=wcLb#UvrMg~y8o=+}Ep{pM%LV{LeB*c2U89=d(d;137Hir@~=NBdww7BsWHQ@0K zGB*T8WODP9r(u5dBxKEP7*`z(cS%|>bX758Ol@?B)jC@GNWM#nSDAHy*Rd@(M4vJc z=UVT^p>^i;(JS;Rg}#@iTTPT*s||JyKFei|Dz((rn)P(QjNew9220^YRy8d!0qk{MJ8@08K+O zFoiZW58rhS)kYO=ST7C3%}Zy?Lp`U96MUVe2QX)LYhnDkjA^w+AZBkW_Z;WCw!_P))AFwJUqDKYR^Lr&9#UBV<(#42J_4R8Ct)LQs+|&0JUDG^0pKP(4 zV{XvS?20Ro#6-J#UWE|PO?^?J z5X1SuT(7zJN+>KQm7A3V8>X$h^GsjQnDsoH)^L~AwccnZPm4pM859|YeL(j~4`eSA zMrM-iFFQ$KT=DRQ5|+q@Cc}(X^2186Wr~d-<_n1s(iIB~hhS_2O_fd(fKmubZlqbx z6RtZ1hS6XTwsu|)%f$i~(_@$(pF&lTf7lSJa>!DJwq7|^y9Uo#qK-=%y7R>Ao=3=m z_=35RwBunQ-qVZ|_!+Yq%Z?BwC}ds*`IJ%H6Zx4fkxjNU{PPTtO$L$+{-Eewbdf=7 z|E+vGlK6MY^lzC!wFPz~Jz! zV{R*ijlSx5mrhLCwa_!wg~3|kK?SXwG>`{CgqR1Ub#!lT8(q%!xI&imnhL1SN(>0HzVp8XERGW1y%Ff<=DJcG;Pp!2ZRD zFeH2kmh&l`p1X?YU@(B;V4Itzse6E0mw1?omJxF99GvrpbLrq7N9lb8<13yn%w*B3 zb)r>rm(5tTS~})rsPcHo&Z;e*W9A(ucp5lW9`oE4JXDlKfPtV-GeP!XV|WI!8J*{L zdiPZUFm{nJ(eq0bB~c--LZV(6aPauIEf_J;t~oK za**KPZ~Q*EylDo@wuNtg^PAu^PaMD>{n5XJ*T4StJ&^V5g$pqGzYWj+7-rhFQa-mO zb;)3oByScbl>7XQ2}xwf)M&~ORrd%m$bPxA3up`iNR3zVYy{)sK8(gMWzd?P9>Ni_ zw31lbXn=nXF)Vb>stw+s`S4PEuQby|RvGMg=yu*{h-U%-Pq^p=VUi?j^M*Fb$60KOIv@|BoU@#!K%79b(Z9P+FNOD zoboM`-Ysn8;UN0{uZ4|tLFnR3D4!b(VWM5Hs;(vb1JFXOz~awrKIeeH>$*O)?AHqj zV>VH1+X!YdeOz*98ION6Y-cT-$?H)=cYxc?S^Noci`oDIClX~`Ye|Yg!#j>ax2Fgm z1NKMTy+AW4FC$AkhqLn|4p)bR3Mz8q$UAN@r(Bv)8p#pSAYOJsW6^2>MLu+u$70}L z7sJ)%34-DbL2JgqNXI6BFbBG>_ekGk=Lc`DbT9{~Sh|s#=;asvy3cts z>n&m80210v*De;GG1z#uxArdJvoa5p8lW>La#b1uf}9;_{C46EFCiG`sd!#u%MYQ; zeYb2~&mwgXWR!g0hS6{bhU1q&(=^=UIXgM$%Hw!6glahCjsXrmDY>u7Z6f2rx@4CF z2x4S+-8RU!no~EFmwO&(Y(q_~%S{uA`6iuA(fDE;Q&?CCaW^m_hI=YlPT%WzYF*W@ zmbDpVe)PJ&?U90!trU`foTh0H07VGO-q1--zpD4>}#@W2RaWFs&Mu_Ds%SJG{Gq9 z)#Ao;)i2lMNsl+gkYI`-=M-`0kR==ig4*8xC47miFgrhiv)Qrh9zZY~R9lp)r&e_Y zz#+bF#i1v)3Yq2zkAWd1xld5vsG`bfDn)eMc>i-KCwRt;iFrdsgq=y{jM%XT) zI_Jy6MFKxDnMmZBmg}&v2@_1r4k1>JbqIZ9V5yUFZUSJ!T#daq+vNEQ8=92I`9W`DA%jeNL&6nu3cp$QKbBqqHsahVZWqwaZ*t#bhoG0Sa12Q7mQu23d(Ei%_N&mK-T;jYE!jda8aqI&375dM5Vye{A=q>-4%}B>-Z`;DZ6p; z+ibn+fvjKmWw{O+6I~%T!#pJu!2JN$B+TSSWEylq!*EIaXp+V|+qjWor%yoh>Gwl} z;8v)=?xy*)ZnGI<*Cw2&j6-s1O2x2-LthyoXPpeBrpFc;My=%czhL&Iz2HD?fQ$+~ zgZA#KWYQ(glg+shp}u%tQ8W#9L$~FV@IgCklWO7y;E8-eB?y=n2hu0SqVGn3rd=QQ z0yfG%*4v`&n&plt_B&y~u%6sk8@-bu&$fxQAkH2=kUdxoXK~0rT*`Z7rPN!#5o^~r zn`n5_@6J6!gCLev>((kZ*-a|>o>_>kG3ghR9$$>c@YOHff=}ETwv8Bjg%HWOa3Zn8 zQ370ETb4nrc-llqro39*LeeRX;a;IFOrQK$FrS-hZR7sxA*q}}~A;feWZn^5X zQmMjJYj=M2s)bUoFl?+@GO@{YBniI89zc}t>y8wz6$p|FrXR+=G0?+{=hsXK0a74v zEk#CNU%)dd7Njn%HZ?*_oH7Cv1iQwJ1h|+18|UUBjq%pTa-;yYgtF1yHTvyayJ^3Z z0B-X7D(M-u3E;+X7XTj6KFcp#AY0!2Ff5+`eK%uq)7@a>%c*4=w7t9UZvASj!UjmM z?JChLg?>IQa~oA?<>`Fr!mmNi+@|HQ@9%v7m6!kCE8qO)x@&JKYxbmnF6PTr5Wj|| zV2={U59!T=Yl35S+PY1qd??7uERia-3(&-_ zzNRd3lNj>jAy$$3T)UWm3w@Jz{e8+2(lFJoeFzb8(rPPDMNb}`x^=i*VEjPr#)l|2 zKIQ?AFTX5-jGB;1YCxueGIct%w?J&r?yPJ$70TNo3{Vl+QY&hggx71OasjW5pOmQa zmHPrZ?V=3bB@t;ohHm*S%GU2{>ebu+^4DD$pPrqrrVASwoKxY)Y1O>3v<ak98OPwnkrWIUT)%ek$Em;N(2IB($iw1K@z0T;J(XWPS*jokapLxEzw z$53=uvBMx~9kR)VU_(5b$}B{+9x9MtzHq)UY}HK`N4Jk_xU^dat8g)JOs&CUVjk8& zGcrgUny`gk(U(K~)`HD+8qO&dIww-lWoBknDAI^pUxGhzdkvwcU1x=mM? zz*-dmmpTlYlj(H|E?>M%B?)L>+j5@radNc^8``VZ;qDoY zqN*g;rHqQYAL?=BS(FWnMoqi=nhfe6u+8FoO}BcPWmSC3eckwim9gTI5LumU1mjG+ z!e&#V`iJNfrZXRUnkbO9p=KxUt2XJ&Tz6{KDrHsV0PCD8ZXB-o&7Pdsus3#g(|nE@ ztXT`KGnoiHQM0v9r{qGQ_1$Xt&9GEV7$3j6gbNc5&m1&7Pjj}k@Z7-)24#llS;O_q z6^wJ`8`sy}L4wXpMQ~yuh|Y!FU0_uL$VSf9^7o}P_x`S#&7`~9(7mZtNE?N?!iJT! zMI~Zb@oTdtUYg{+gor{X#)>MwRu5zk$jbaA9@*5Hl; zC&MGc#B3Gqh*_oH8E)O7W@}~YeMG8nH_h^$UAuTwXPSxtjHC$~qTInN9Q^PR>&#-6 zgdn2okNGT~UuhyklXL4J&BMu*Yw?n|K131L=-#^=-??tY&{hWjUf9Z!{TO6H9n8I* zko7}S)`bJnkwV#Z=h76MBphR4NrnsypoRRHe@}}VUz<7(x)z>C&^kB)JRg^*n=My- z;Lkj>V26-Py9L}jS-_ROoLxg4uzElRKm73?EkD9=IE)LO*}kgliv_NWK*w$Y@9WRD z*)nO|f6u5*E6t0#3#Lk>6>%)MN<&iZr6&w*Dhzkw?}qOXP(FDm=fVDQWKKzs$$K5y z1H{N2IApMXwTGmAgw@)~RO^t#@&Zuvu9yL?C2tga9v%Lu%<{iSn>Vh^lN;ArElLIrD}wVnXBfmuNSlFf>vge}sH zE}mgY-p>Q0@zM^KV32xUj1Y~JThIo%fZ^o%yoIe%&H_+ds5NGnN)y&Xr6kENn>X|^ z`>$R&%Fu08XYZjEyO&}^ z=?7QZ|K*t@Q!23&j$fTLKhyb~SLRjS1*^1MCoKTE`pFlli%cUCJ9gd!hItXu)G>BkU>3 zm-)#=LVuX?sF**K@KKWeVJoH`1f7ey$*q=NkitqHhTB?SR8XGn#KH+PVXKm4w$J5Q z6*qq-?x^c|v-M_d1-FhH&i|ZDJ3a@R74VhU$MDpx1%eqFK4$zbXeMXp6Y({^=OO+s zpSZDvvdrOSSIVG-m#OR8j|O+Zs{EiA9jk*g2c})wa5vqO2?|9`yM1V(r|Z` zGj)jFWK*zFTo5o9=Bl&JYOM_umtf5mHk?H`uRO`4LefayGqMLIKNc97O>!YBh#ot$ zE?}fw&kz6f2jFl2y?+E(AHK}<5kajx-nfR{+-)?wfJyt=uNbZ#|Gr{%=lj4muO{#! zA!yUKA#pCbGifogCXNKlf(8hJI-iGUz(z%K!`3Cp2s~K3kTj7!*a(8TR4P@xYR8J+ zdN|4~i*#k$_*s=YT8qRld zCxL(S7k3MoAz*#{@hLpCo5RH&3UfOa{EjLOdy^b)95wLtt)&yg;>Ce-ddufqc=YmU z-7fmBVIX(QJ8V*!bYB*GPog7rleNlds*VVf3%x$YDPdfEZOr8JSs$+?Iy#g1u0^dJ z1QD^TNI$rH`pXi?OyVmqY(Y%_B%~8IBVpC5?%2JQGHYfnfsNsdDiFMuFl?XM9@LNj zCxiN_cURr*ZwAv0sj5e9I6OsKdQWEoJCg}>$ z34_|yeCeQnGhx7q^$~?xjqF>`me1}sse;P1 zpP1nHLR0=i`{XnJPuh^A3d`;h+M6PpD5rN!Ogatx1~YM{c zgsdlc3f5;*+O_$^D&8-HfR*zSvq{(~LRb@uF=^2xGHI>W*<;{my&(3%%aMsYfVHq@ zXeXL7xw3ZYh&6?5OqI-hM(vZAN2||%=dgY1oke^2jZM>L%g*V-+~_cOwd|}+-u7kq zB%MxPSe^)R?o9@9NXSc*x~05tOjHU56Ft#6!Fuk?q?h@`4a52R8$Tz~hA=ROH|}_y zAJ;}#|F%;;!EZdMX+OI%P5iqYn+)WTV{6~06Dpwh=;~G*4b_{zYAzH-_JySO_DK!r z^DeX%J$9vn%ljo)gXx6{kdBXPxOud~#~BVS30df)NJ9& zTPvvXJyOy?t?sD}O;;L~1!)c>j}gYy#&K-v?|{xZ-_V(@dB@qPFYF+GCq)YwnVj0_ zDoH_8uXU=ZRQIRgt}d1y$Q}?zCixfbsefl|NZzuxOv10WW@poZxl`;dpMG<-{Omi6 z`o`OBJG)47gC&b04djxDhdAnteWiTZC{5oY;m9%-nu1Mh{j_iud-f>wR8mp(0M*$w z5v=la8$sk58x7t`DJ&$3*PFggsMv`uPpTV}Zh_D-5U%iv%Yrai4_pG85`KmuwrXR* z?OhItcW*Qi{w@%J9)Etp;UuxCmp(jzM``E^{+)7N$I}Kw#U<3OVj!kaIfSwJGhZ53 z`=22Y5-Y1P`h4!N<@dF>m9MGfH}ha}yGlajDGPJb7vG%8pD*SHEUBjJw zw=v#Ln7Q_{oK53Jy)i9aCEX|L0Upl#Wea3Myy$n92r8riz_-xYv5pPvp{e-<*WqS88v@V+GJ9Y)={q}R?$-C z4?|0&N9Fm~fCW4uAu;s}_^kzg0HGEw+6da+o_()qH2X&)|~*xv@SF9rO4S`By-#TawHK6;X>kO-D)*NVs_VD-{XjB*E+ggGG7U#aP%8p~ZF8UIX53 zUS%8p!VMoNlOTzm%52~aWOo<3qlb_WAHw>@@0&aMUd)69O96t*g?3q=3;|EM;elwt zH-t#edE4YyzE2l}EpjU>6=_Dwvy!<^St!?mfn*^-H*zNZa^;eIu9H8@{M4FH zE~B%&P8b5>OTMSSn$3PJ9jjSZRq#_L1N(PWz4&>d)(7NRZ89^Qc4-Mg8ACES1fL4Z z%mHXg<~d5pXolS>o%sZjcHLR-k^7j5wKAK906i|6Y!9Ir-GjmCfvG`9wxm>~j1iS8 zL|Vew3_=G79bZz)YbBe-mIW}d(SUG`B&##h8a(BtrlXU#K)I zk1VcCsp|umX5bRQm1pf^m!+eNiS&2;@i41GvN}#Hk1rN*cu|G>LqKf1u=8Tv_^5_) zd|A?awOT89dc1_k`vvvLZYl{AVmmN!sZM)R+`(PI4LW9`f${o%vq*}MN%xj6sZW*PjL z&}&KV)h3E4*ISYdn&Dl%y_1d&PH{Sj0SZe@4*D24Q`XuK48Hf-94@9+$S7=cUc#Bl z&?Hl3;0f$O1FXRHH=@2PKl^K|qu>2o)x~@Nrg>XOxZ$d@qLRXA4gLi7ung@) z_&j;LboeUV?0K*%i})%09V(<&t_<@F$@3_E4-6-wB<|SSfSxHGMfVQKqE8F}auw2R z(keqb(_&>xByDZQG!wN7+G$QDmiK2;dQs|rl%CYmHS>Ln#cboac?oDogR!NrfT$3Q zKZv(iY4)d5r464&`k<8wrk~Y>5;%P^Zv^tll!oit0&$UoggrAp&V6~hHrZ7Lts)Bu zc`ulWnF3$Xh<0<$&VB4B zO0qpR?{$6v>&_m*eKzj>D70E_P_hNnvri);&`UUZsdM-Iq<|Z|1ULa*0~?>-2C~=b zV|DhPJpJ~6|Mx|C@%K&8YNG+Is+Uwk=2A7%aOWqO+fg<4w5XTjreMCgPgxh(l93xz z)XePF>yOorhJ>XSZuFu(fXtk-qIVy%_Li%|R_0Ex=s96#xLlRA;qZ5zRu1h>*JK(+ zY|y*1Q3YKx5j6Dy(%zK{0gR0Zlun$3l#{-;?T%LKY!7n8jHsm}@kz|-$Vp@os`eU{bU5IV-dREXq_^Yth z+c0m)4D|ZUJhzrvcmu*R`umm2@+@i(k7?X@S_V6*?^-3YOt*pTHTzhfe*33YUH-iV zqE<}+Ynvd|Zg;KHCzfw0ZYZoa8PSAD2h8Gnq=P~T5oN4xZz7U+OQ*^jcL7RmM_1v1%n&7oEnb*3i>F?Vncnx~yZ!#yz-5Q$J*s@OFz)x~_ z)M~}thd8pIIVowY(GQJ`DGC;9M~7l1C)*HSiYJIg1|)x+qLGgzSmz-oFaNo;l=T z0cvrCE6akFwJC>5v#EmM!zohXM+&G+bdsxwXxBrnO@>$Mwh5IRzt?WHCbxm?HT%%2 z9JF&aY;A6uQgR5h$py?WCqy>xv|Etn9V+!yy`n{cnpQq@uifdDWlf2cD8U^1U{2qQ zmX0Y?Xu??xA?x2W2kLzjhemECFHLm4ps8tX0@u2%Df>boXS-dP$Ir}j!XRcAaNefd zjL#2YHa@Y`qJZqzp*-T#GaImUFy{3eU9gRo=)ou5Y=2^>gAGqowqHc>2e4C8;mT+K z_pyBSIMC=_;I5m9Jj%rDqhXfu;$%gc6ait^8ov3s3xiGuvw3wb>v*u+h6j5Em6j-Z zG&kqO`FNeACqa7L_uIM|m8{rv!+xcf-0Dqp=9beagNWl2QO(tZRXxy^!#8X*-U@7D zmM)n}tev7-7)dKL*?MlS-*Rf+fxL#WWWOulFBjNy%4LC7D10Qcnj1ZQE z%Hicz4wKcW9&X>S-gxtkw}1X$|B)yE)j#+rzjGVNUZ+4-&0sZoZrQilx761{5+F)%;NT^G2nV-_PFO$lV%)I_#% zU-WiOMpaOw7TvXJ`e^P4l{C;80~cOlHr{a1GMlw<*;kKt%zSzYmnYwc>G?A#U`D+> zB0VYI$6~HOObn6wODbyMYuB^$!wV2;?@BRW$LORT1CEBK&zMfqHI8o*iC1G}6a)+z zbMNMk;F96V{6y}_{Vsg(Q$_ToosAqe`c5V(6G2r%xUM`xH1P4xOcpjUXF#`|F@!t^ zK|9kA^LHb2e>jeR92EQ`P#Jq;e zln(XEK`yY2Y*GJ=GG7s$(jiS09V^4i6CwQO%;a2WvrL~a`ekphQ|)YT=#9-@x0RK9 z=De(LGqTqWX<<&YYI%Vx1+MHOle?|b4YYpR4+9p|G_dI=^IGJSN!xD{u1pn)L^DoLJq;=Z zn}%tJpDdnUm8Nv8=n(kkqYk0?5#+im?ZdYUX#!zp%6Cl^CHxtdm8ffmK~QjmUhXBJ zn`CRwU(nHOv#BMtn=dUCgyZT4kHsEN!fvliz=^BBw9X8&uKk>Ml_7e}?AMN^eC6JShs zBu-3*Hlm=jv9S&1a2wXEmC4jDV6m7{nb#`%P)J3MRx}Httcz4tZ7)k_Jt`erqlb`n zw(QAhf>&(CzdbLnc4<_$p#n~4|#`&lsel{a~lK@{*~h9`9$ zvqvFy;G_CdvR3i6Y33Y+uWhza@ZpPjK)Gw?`FQEs zW=&R06U6W?yVf)HHjurx0gdt)>V=qN*f#6yIr@2enUZ!-+F?g9x zCNY2&u$)g}eD-~qoj(OxT|v9hurnyk>Ds-nR>17#D!2PR+(Eis?I)Tf;mv}LXap<^ zDd8w{H?0L{S0~~o^hkeBGx7#4d}j;68(lG5@furR{@e2(Bg)@FGQ6uX%V;p@+}Uo! z%d-{r5V0YTKS!ktG#jxQ4J2gy0H$@>9a_IV*cW7s^6X?qyh;*UH23|+oi5zjY18|} zg%LH&@|qbK|5j-hu$0I2N#MGL{5_PC8OFrMW#jH$sZ3lmw><^QakmJrqkTqg?yNNH z@YR)olX0PzCj06Sx76bYeK}|&Sz#&a)ftF-X#&`U6iw=KN!h=y$}goZ*;gPV^O=F7 z$)pDzDo1{<)WQUS6;!DHie;c^L%X*H{r(W7$<$WMCCp}*AWaFn@$j!hXZvkanhs6i zT0ptDG&^%**2$8*DOc;Y31TJPFJ@mI6PU8BMVS|ZUQtbBdVXX+pTc^2WG=ob0J?a) z7BzDH;#Uj>ZwCr8$o2T(P&or!dMynl_NK%%hd?wxYp3_+OT~~ygy5AD1vPVD^15I_ z_e_YyoFo8pnRT4MyQ-?v~ELfG0M{7t_qFae#RPG;a!Pcl%bnPI~mZA(z)n+4=2pTJCL6!BC0#DH$ znoMd08(TY|Wf!vDf7z5OYseQ1Q@WVczUV-yRc56|oN%C!mp+DFbCmz%`_KD1RdmmMcSKB9+JCB7~axT_WylWdaT= z<}TL?<|{jJ@sH^l3SDzO_qRH**+<-2o7}FvLI?K5@Nu5p?ZPLo78Kk@{fv5M0bk6R z)I5v&yiL!0biQ|`WvVcn2(k)sqnd04A_Hai!W?)a>o_i{`FDiN=7uH6MAMBUw}?@U$B& zPey%!ZUIq)43YI!?RsDn3rZAcked@R@9vo*bP5|?b1F_Ja6T*P^lh2Nwqf%5T&zhw zqo%RDG=XgnS0~S4diEKV^Al)iHEi|T&>HpVw8e}HvjR_l!mq7dCMLk75}R9|rq7ZB zNgHg*rghq+7onuH0gJmQDHhC{q-QDO^@+VVVCt|s7>9@k*wt@J1YJspxzG$CteJaL z6QtH8ulw6$0PeRlsQNiI=e>Ed56*Z^F#FoyG}pf`VbCj}D(e(*3Kr*w2EHFYpTo&j zNqsR4YWSLJSJDbc>EOIikJsWQxK?qhnhc9?iVYePA53njLWamH1qXvHOyKI$dscJ? z^zXBa8NB@PeSLiRqAqe>Z6ACccDK5DORU=FszANM>}!G473u@yi$F|bCLZ*8?KXNSUfeVCMAJ{SLhMR1wz_Z-bj3f4*a`=k`X61}}S?9U8=VS#s$DD_&dl zwtRlPqW1|k%_uv~Y^lDkQX`OSkP6)(eha43dp-6xURqPa`?{2mmxl9{ugt8Sc7GQZ zvoSn<`3zn>`%KLy7uDvlquzY5B}ao+D^oL>sbgw^Xj2IwR0Et06@jJkz;h8ycsFuo z@oQRg7jkhM$X>@DnRd=Ie#;?Z9F1D>q~F~Tv>|NPktKjmrF>%@3CbpmT3it10vo3Y zU@fvP?DV#vl07Iz4?cMB_n|uce_<^lxs2VY zpsrzlRycrWKym9B7~(`zGm%A|TE#h`!MbjMTpQ%_XgI7HYd|Ni)%^K}Ajq2k9;GjZ zW{rED3Mk5SU>aZ#%I#`4Jw$T%$>rMi2;EE%r;+;gU;&f6ssBEN+Vh%2J ze|rAzhw$pN@77W+s_o4IJU%$cO|suo>no7hlU(_48%6pNOg;g{_l- z`ept2N=z-|=C%Tagz7f|1xpTWA|s-jcY3wMi&?1_ZF?nV(O~0LVqZQLMm5tQ&O(X<}n+s-L~w3YHd|4bOeZM=LB7v`_H``Hlvvkj>%v{!y!6hS!yUiHA5L3jz4SX`azAh-KIyT3>W?Gnx zqJX5Ad6p5~E`$fU#^2#i#J_sel!53ZemX8`)8qSvbfxW~9gtvV)$Q4+iP_e=0-`k? zUsgnA!t54F{OF>DWu@&kis=353H?e0nQ5gXp2Uw)q>Mc?&k(S~Sdmb$nv+e-CDqQG z(*81c@=s+g;b>w$uX43G{Pn8a$@IhhfgJS*t&UuYdVLD8SeOHJVjj<|zqMI^2p2&K z_AuE@C$=7%g1yzE&<&r`FU}-i>p+GJ^n(vRfaP-erE^))vJL(5rR_;M92I`-jif0x z05(m%;sp{ZW0KO9a4L|nDOf09iq(V-!!i@m*Vq%v@Pss_4UV?U=__beFCg#jLU*u5 zzc0%LEEjWH_^qOA78gFA#ic1?3%HZnXB}?QTWzy|4zns1iQ=ke0LfG}R^2e26oRAw zZFUnJ0Yasyd3XxtDDBT+?_;x6&r20ThYTZQzKlL26pXyCne~|u)T&`w=3@bdO|)to z_9UE-XO`NOSt;?YK?YxY*n{tUIEKUXHOv-xKN*Z?YnUuF%onBA?nj(*%iP;q(10ar zn?_&V2+YN{L&Lm-XJMgaB)$H)S4a*>DTnQoz$r*UJ;eoDDKc1;CU{*6IGeXCC^qV? z-A(amRAil^$}%;lgHq!peQ6mT#LJ}!RnzMfQY3x2=prX#AM*whJcq`7=>i!Bu%G#v zpMeiQ{P0Vejs3U((O-q1{;@t>ttJV{8TaF6-(*x-4IJ^VpaC5Sb44EqoSY8!CNRq? zkxnu*r{xr|1SsdP%uzdmygf8mw{NnAEzsRPSeK869P5t(GOOQ&6jd@dPeH zf)BWcx9|4^&}gFDuaol32Q?n#yacn)nz*EoWGbπ$JsDXEMBNyI>>;W{`}u*}Rq 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 literal 0 HcmV?d00001 diff --git a/src/doc/source/images/forkme.png b/src/doc/source/images/forkme.png new file mode 100644 index 0000000000000000000000000000000000000000..100aad0f6af4fe9c6334391365b41bf1bd9eac5c GIT binary patch literal 5333 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 literal 0 HcmV?d00001 diff --git a/src/doc/source/index.md b/src/doc/source/index.md new file mode 100644 index 000000000..8ac8f2e55 --- /dev/null +++ b/src/doc/source/index.md @@ -0,0 +1,91 @@ +--- +title: Cargo, Rust's Package Manager +--- + +# Installing + +The easiest way to get Cargo is to get the Rust nightly build by using +the `rustup` script: + +```shell +$ curl https://static.rust-lang.org/rustup.sh | sudo bash +``` + +This will get you the latest Rust nightly for your platform along with +the latest Cargo. You should run this script almost every day to get the latest updates. + +If you are on Windows, you can directly download the latest [Rust](http://static.rust-lang.org/dist/rust-nightly-install.exe) +and [Cargo](http://static.rust-lang.org/cargo-dist/cargo-nightly-i686-pc-mingw32.tar.gz) nightlies. + +Alternatively, you can build Cargo from source. + +# Let's Get Started + +To start a new project with Cargo, use `cargo new`: + +```shell +$ cargo new hello_world --bin +``` + +We're passing `--bin` because we're making a binary program: if we +were making a library, we'd leave it off. + +Let's check out what Cargo has generated for us: + +```shell +$ cd hello_world +$ tree . +. +├── Cargo.toml +└── src + └── main.rs + +1 directory, 2 files +``` + +This is all we need to get started. First, let's check out `Cargo.toml`: + +```toml +[package] + +name = "hello_world" +version = "0.0.1" +authors = ["Yehuda Katz "] +``` + +This is called a **manifest**, and it contains all of the metadata that Cargo +needs to compile your project. + +Here's what's in `src/main.rs`: + +```rs +fn main() { + println!("Hello world!") +} +``` + +Cargo generated a 'hello world' for us. Let's compile it: + +

$ cargo build
+   Compiling hello_world v0.0.1 (file:///Users/wycats/src/hello_world)
+ +And then run it: + +```shell +$ ./target/hello_world +Hello world! +``` + +We can also use `cargo run` to compile and then run it, all in one step: + +
$ cargo run
+   Fresh hello-world v0.1.0 (file:///Users/wycats/src/hello_world)
+   Running `target/hello_world`
+Hello world!
+ +# Going Further + +For more details on using Cargo, check out the [Cargo Guide](/guide.html) diff --git a/src/doc/source/javascripts/all.js b/src/doc/source/javascripts/all.js new file mode 100644 index 000000000..2becd765c --- /dev/null +++ b/src/doc/source/javascripts/all.js @@ -0,0 +1 @@ +//= require_tree . \ No newline at end of file diff --git a/src/doc/source/layouts/layout.erb b/src/doc/source/layouts/layout.erb new file mode 100644 index 000000000..4c6a8d983 --- /dev/null +++ b/src/doc/source/layouts/layout.erb @@ -0,0 +1,34 @@ + + + + + + + + + + <%= current_page.data.title || "The Middleman" %> + + <%= stylesheet_link_tag "all" %> + <%= javascript_include_tag "all" %> + + + + <%= link_to image_tag("forkme.png", class: "fork-me"), "https://github.com/rust-lang/cargo" %> + <%= link_to image_tag("Cargo-Logo-Small.png", class: "logo"), "index.html" %> + +
+

Cargo downloads your Rust project's dependencies and builds your project

+ + <%= yield %> + +
+ <%= link_to "Guide", "guide.html" %> | + <%= link_to "Frequently Asked Questions", "faq.html" %> | + <%= link_to "Manifest Format", "manifest.html" %> | + <%= link_to "Building Non-Rust Code", "native-build.html" %> +
+
+ + + diff --git a/src/doc/source/manifest.md b/src/doc/source/manifest.md new file mode 100644 index 000000000..4047a98d4 --- /dev/null +++ b/src/doc/source/manifest.md @@ -0,0 +1,130 @@ +--- +title: The Manifest Format +--- + +# The `[package]` Section + +The first section in a `Cargo.toml` is `[package]`. + +```toml +[package] +name = "hello-world" # the name of the package +version = "1.0.0" # the current version, obeying semver +authors = [ "wycats@example.com" ] +``` + +All three of these fields are mandatory. Cargo bakes in the concept of +[Semantic Versioning](http://semver.org/), so make sure you follow some +basic rules: + +* Before you reach 1.0.0, anything goes. +* After 1.0.0, only make breaking changes when you increment the major + version. In Rust, breaking changes include adding fields to structs or + variants to enums. Don't break the build. +* After 1.0.0, don't add any new public API (no new `pub` anything) in + tiny versions. Always increment the minor version if you add any new + `pub` structs, traits, fields, types, functions, methods or anything else. +* Use version numbers with three numeric parts such as 1.0.0 rather than 1.0. + +## The `build` Field (optional) + +You can specify a script that Cargo should execute before invoking +`rustc`. You can use this to compile C code that you will [link][1] into +your Rust code, for example. + +[1]: http://doc.rust-lang.org/rust.html#external-blocks + +```toml +[package] +# ... +build = "make" +``` + +# The `[dependencies.*]` Sections + +You list dependencies using `[dependencies.]`. For example, if you +wanted to depend on both `hammer` and `color`: + +```toml +[package] +# ... + +[dependencies.hammer] +version = "0.5.0" # optional +git = "https://github.com/wycats/hammer.rs" + +[dependencies.color] +git = "https://github.com/bjz/color-rs" +``` + +You can specify the source of a dependency in one of two ways at the moment: + +* `git = ""`: A git repository with a `Cargo.toml` in its root. The + `rev`, `tag`, and `branch` options are also recognized to use something other + than the `master` branch. +* `path = ""`: A path relative to the current `Cargo.toml` + with a `Cargo.toml` in its root. + +Soon, you will be able to load packages from the Cargo registry as well. + +# The Project Layout + +If your project is an executable, name the main source file `src/main.rs`. +If it is a library, name the main source file `src/lib.rs`. + +Cargo will also treat any files located in `src/bin/*.rs` as +executables. + +When you run `cargo build`, Cargo will compile all of these files into +the `target` directory. + +``` +▾ src/ # directory containing source files + ▾ bin/ # (optional) directory containing executables + *.rs + lib.rs # the main entry point for libraries and packages + main.rs # the main entry point for projects producing executables +▾ examples/ # (optional) examples + *.rs +▾ tests/ # (optional) integration tests + *.rs +``` + +# Examples + +Files located under `examples` are example uses of the functionality +provided by the library. + +They must compile as executables (with `main.rs`) and load in the +library by using `extern crate `. They are compiled when +you run your tests to protect them from bitrotting. + +# Tests + +When you run `cargo test`, Cargo will: + +* Compile your library's unit tests, which are in files reachable from + `lib.rs`. Any sections marked with `#[cfg(test)]` will be included. +* Compile your library's integration tests, which are located in + `tests`. Files in `tests` load in your library by using `extern crate + ` like any other code that depends on it. +* Compile your library's examples. + +# Building Dynamic Libraries + +If your project produces a library, you can specify which kind of +library to build by explicitly listing the library in your `Cargo.toml`: + +```toml +# ... + +[[lib]] + +name = "..." +crate-types = [ "dylib" ] +``` + +The available options are `dylib` and `rlib`. You should only use +this option in a project. Cargo will always compile **packages** +(dependencies) based on the requirements of the project that includes +them. diff --git a/src/doc/source/native-build.md b/src/doc/source/native-build.md new file mode 100644 index 000000000..cbee444b5 --- /dev/null +++ b/src/doc/source/native-build.md @@ -0,0 +1,60 @@ +--- +title: Building external code +--- + +Some packages need to compile third-party non-Rust code that you will +link into your Rust code using `#[link]` (more information on `#[link]` +can be found in [the Rust manual][1]). + +Cargo does not aim to replace other tools that are well-optimized for +building C or C++ code, but it does integrate with them with the `build` +configuration option. + +```toml +[package] + +name = "hello-world-from-c" +version = "0.1.0" +authors = [ "wycats@gmail.com" ] +build = "make" +``` + +The `build` command will be invoked before `rustc`, allowing your Rust +code to depend on the built artifacts. + +Here's what you need to know: + +* Cargo passes your build script an environment variable named + `OUT_DIR`, which is where you should put any compiled artifacts. It + will be different for different Cargo commands, but Cargo will always + pass that output directory as a lib directory to `rustc`. +* Cargo will retain all output in `OUT_DIR` for clean packages across + builds (intelligently discarding the compiled artifacts for dirty + dependencies). Do not put the output of a build command in any other + directory. +* The actual location of `$OUT_DIR` is + `/path/to/project/target/native/$your-out-dir`. + +What this means is that the normal workflow for build dependencies is: + +* The first time a user types `cargo build` for a project that contains + your package, your `build` script will be invoked. Place any artifacts + into the provided `$OUT_DIR`. +* The next time a user runs `cargo build`, if the dependency has not + changed (via `cargo update `), Cargo will reuse the + output you provided before. +* If the user updates your package to a new version (or git revision), + Cargo will wipe the old `$OUT_DIR` and re-invoke your build script. + +In general, build scripts may not be as portable as we'd like today. We +encourage package authors to write build scripts that can work in both +Windows and Unix environments. + +Several people who work on Cargo are also working on a project called +[link-config][2], which is a Rust syntax extension whose goal is to +enable portable external compilation and linkage against system +packages. We intend for it to eventually serve this purpose for Cargo +projects. + +[1]: http://doc.rust-lang.org/rust.html#runtime-services,-linkage-and-debugging +[2]: https://github.com/alexcrichton/link-config diff --git a/src/doc/source/stylesheets/all.css.scss b/src/doc/source/stylesheets/all.css.scss new file mode 100644 index 000000000..bee95862e --- /dev/null +++ b/src/doc/source/stylesheets/all.css.scss @@ -0,0 +1,167 @@ +@charset "utf-8"; +@import "compass/reset"; +@import "compass/css3/images"; +@import "fonts"; +@import "solarized"; +@import "colors"; + +html { + @include background(image-url("noise.png"), radial-gradient(top + center, circle, $light-green 0%, $dark-green 750px)); +} + +pre { + font-family: "Consolas"; +} + +body { + font-family: "Roboto"; +} + +* { + box-sizing: border-box; +} + +body { + display: flex; + flex-direction: column; + align-items: center; +} + +a { + color: $orange; + + &:hover { + color: $purple; + } +} + +h1 { + font-size: 24px; + margin: 20px 0 10px 0; + font-weight: bold; + color: $purple; + + code:not(.highlight) { + color: darken($orange, 5%); + vertical-align: bottom; + } + + &:hover { + .headerlink { + display: inline-block; + } + } +} + +h1:first-child { + margin-top: 0; +} + +h2 { + font-size: 18px; + margin: 15px 0 5px 0; + color: $purple; + font-weight: bold; + + code:not(.highlight) { + color: darken($orange, 5%); + } +} + +code:not(.highlight) { + font-family: Consolas; + color: $purple; +} + +main { + display: flex; + flex-direction: column; + + max-width: 900px; + margin-bottom: 10px; + + background-color: $cream; + padding: 15px; + border-radius: 5px; + box-shadow: 0px 0px 5px 2px $dark-green; + + p:first-child { + color: $light-green; + font-weight: 500; + margin-top: 3px; + padding-bottom: 15px; + border-bottom: 1px solid $second-green; + text-align: center; + + a { + color: $dark-green; + + &:hover { + color: $second-green; + } + } + } + + p, ul { + color: $dark-green; + margin: 10px 0; + line-height: 150%; + } + + ul { + margin-left: 20px; + } + + li { + list-style-type: disc; + } + + strong { + font-weight: bold; + } +} + +img.logo { + align-self: center; + margin-bottom: 10px; +} + +pre { + background: $beige; + padding: 10px; + margin: 10px 0; + border: 1px solid lighten(#93a1a1, 20%); + border-radius: 4px; + line-height: 120%; + max-width: calc(100vw - 45px); + overflow-x: auto; +} + +footer { + margin-top: 10px; + border-top: 1px solid $purple; + padding-top: 10px; + width: 100%; + text-align: center; + + a { + color: $purple; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } +} + +.headerlink { + display: none; + text-decoration: none; +} + +.fork-me { + position:absolute; + top:0; + right:0; +} diff --git a/src/doc/source/stylesheets/colors.css.scss b/src/doc/source/stylesheets/colors.css.scss new file mode 100644 index 000000000..08a8e1297 --- /dev/null +++ b/src/doc/source/stylesheets/colors.css.scss @@ -0,0 +1,12 @@ +// primary +$dark-green: #3B6837; +$light-green: #199B5C; +$purple: #B64790; +$orange: #F3BB00; + +// secondary +$second-green: #62865F; +$beige: #EEECDD; +$cream: #F9F7EC; +$dark-cream: #FFF2C8; + diff --git a/src/doc/source/stylesheets/fonts.css.scss b/src/doc/source/stylesheets/fonts.css.scss new file mode 100644 index 000000000..d65b3d2ce --- /dev/null +++ b/src/doc/source/stylesheets/fonts.css.scss @@ -0,0 +1,39 @@ +@import "compass/css3"; + +@include font-face("Consolas", inline-font-files("Consolas.woff", woff), $weight: 400); +@include font-face("Consolas", inline-font-files("Consolas-Bold.woff", woff), $weight: 700); +@include font-face("Roboto", inline-font-files("Roboto/Roboto-Regular.woff", woff), $weight: 400); +@include font-face("Roboto", inline-font-files("Roboto/Roboto-Bold.woff", woff), $weight: 700); +@include font-face("Roboto", inline-font-files("Roboto/Roboto-Medium.woff", woff), $weight: 500); + +@font-face { + src: url("../fonts/Consolas-Italic.woff"); + font-family: "Consolas"; + font-style: italic; +} + +@font-face { + src: url("../fonts/Consolas-Bold-Italic.woff"); + font-family: "Consolas"; + font-weight: bold; + font-style: italic; +} + +@font-face { + src: url("../fonts/Roboto/Roboto-Thin.woff"); + font-family: "Roboto"; + font-weight: 100; +} + +@font-face { + src: url("../fonts/Roboto/Roboto-Light.woff"); + font-family: "Roboto"; + font-weight: 200; +} + +@font-face { + src: url("../fonts/Roboto/Roboto-Black.woff"); + font-family: "Roboto"; + font-weight: 800; +} + diff --git a/src/doc/source/stylesheets/normalize.css b/src/doc/source/stylesheets/normalize.css new file mode 100644 index 000000000..73abb76fa --- /dev/null +++ b/src/doc/source/stylesheets/normalize.css @@ -0,0 +1,375 @@ +/*! normalize.css v2.0.1 | MIT License | git.io/normalize */ + +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ + +/* + * Corrects `block` display not defined in IE 8/9. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section, +summary { + display: block; +} + +/* + * Corrects `inline-block` display not defined in IE 8/9. + */ + +audio, +canvas, +video { + display: inline-block; +} + +/* + * Prevents modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/* + * Addresses styling for `hidden` attribute not present in IE 8/9. + */ + +[hidden] { + display: none; +} + +/* ========================================================================== + Base + ========================================================================== */ + +/* + * 1. Sets default font family to sans-serif. + * 2. Prevents iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -ms-text-size-adjust: 100%; /* 2 */ +} + +/* + * Removes default margin. + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ + +/* + * Addresses `outline` inconsistency between Chrome and other browsers. + */ + +a:focus { + outline: thin dotted; +} + +/* + * Improves readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +/* + * Addresses `h1` font sizes within `section` and `article` in Firefox 4+, + * Safari 5, and Chrome. + */ + +h1 { + font-size: 2em; +} + +/* + * Addresses styling not present in IE 8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/* + * Addresses style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/* + * Addresses styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/* + * Addresses styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + + +/* + * Corrects font family set oddly in Safari 5 and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/* + * Improves readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +/* + * Sets consistent quote types. + */ + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/* + * Addresses inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/* + * Prevents `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/* + * Removes border when inside `a` element in IE 8/9. + */ + +img { + border: 0; +} + +/* + * Corrects overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/* + * Addresses margin not present in IE 8/9 and Safari 5. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/* + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/* + * 1. Corrects color not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/* + * 1. Corrects font family not being inherited in all browsers. + * 2. Corrects font size not being inherited in all browsers. + * 3. Addresses margins set differently in Firefox 4+, Safari 5, and Chrome + */ + +button, +input, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 2 */ + margin: 0; /* 3 */ +} + +/* + * Addresses Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/* + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Corrects inability to style clickable `input` types in iOS. + * 3. Improves usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/* + * Re-set default cursor for disabled elements. + */ + +button[disabled], +input[disabled] { + cursor: default; +} + +/* + * 1. Addresses box sizing set to `content-box` in IE 8/9. + * 2. Removes excess padding in IE 8/9. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/* + * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/* + * Removes inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* + * Removes inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* + * 1. Removes default vertical scrollbar in IE 8/9. + * 2. Improves readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/* + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/src/doc/source/stylesheets/solarized.css.scss b/src/doc/source/stylesheets/solarized.css.scss new file mode 100644 index 000000000..0c7657006 --- /dev/null +++ b/src/doc/source/stylesheets/solarized.css.scss @@ -0,0 +1,71 @@ +@import "colors"; + +.highlight { background-color: $beige; color: #586E75 } +.highlight .c { color: #93A1A1 } /* Comment */ +.highlight .err { color: #93A1A1 } /* Error */ +.highlight .g { color: #93A1A1 } /* Generic */ +.highlight .k { color: #859900 } /* Keyword */ +.highlight .l { color: #93A1A1 } /* Literal */ +.highlight .n { color: #CB4B16 } /* Name */ +.highlight .o { color: #859900 } /* Operator */ +.highlight .x { color: #CB4B16 } /* Other */ +.highlight .p { color: #586E75 } /* Punctuation */ +.highlight .cm { color: #586E75 } /* Comment.Multiline */ +.highlight .cp { color: #859900 } /* Comment.Preproc */ +.highlight .c1 { color: #586E75 } /* Comment.Single */ +.highlight .cs { color: #859900 } /* Comment.Special */ +.highlight .gd { color: #2AA198 } /* Generic.Deleted */ +.highlight .ge { color: #93A1A1; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #DC322F } /* Generic.Error */ +.highlight .gh { color: #CB4B16 } /* Generic.Heading */ +.highlight .gi { color: #859900 } /* Generic.Inserted */ +.highlight .go { color: #93A1A1 } /* Generic.Output */ +.highlight .gp { color: #93A1A1 } /* Generic.Prompt */ +.highlight .gs { color: #93A1A1; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #CB4B16 } /* Generic.Subheading */ +.highlight .gt { color: #93A1A1 } /* Generic.Traceback */ +.highlight .kc { color: #CB4B16 } /* Keyword.Constant */ +.highlight .kd { color: #268BD2 } /* Keyword.Declaration */ +.highlight .kn { color: #859900 } /* Keyword.Namespace */ +.highlight .kp { color: #859900 } /* Keyword.Pseudo */ +.highlight .kr { color: #268BD2 } /* Keyword.Reserved */ +.highlight .kt { color: #DC322F } /* Keyword.Type */ +.highlight .ld { color: #93A1A1 } /* Literal.Date */ +.highlight .m { color: #2AA198 } /* Literal.Number */ +.highlight .s { color: #2AA198 } /* Literal.String */ +.highlight .na { color: #93A1A1 } /* Name.Attribute */ +.highlight .nb { color: #B58900 } /* Name.Builtin */ +.highlight .nc { color: #268BD2 } /* Name.Class */ +.highlight .no { color: #CB4B16 } /* Name.Constant */ +.highlight .nd { color: #268BD2 } /* Name.Decorator */ +.highlight .ni { color: #CB4B16 } /* Name.Entity */ +.highlight .ne { color: #CB4B16 } /* Name.Exception */ +.highlight .nf { color: #268BD2 } /* Name.Function */ +.highlight .nl { color: #93A1A1 } /* Name.Label */ +.highlight .nn { color: #CB4B16 } /* Name.Namespace */ +.highlight .nx { color: #93A1A1 } /* Name.Other */ +.highlight .py { color: #268BD2 } /* Name.Property */ +.highlight .nt { color: #268BD2 } /* Name.Tag */ +.highlight .nv { color: #268BD2 } /* Name.Variable */ +.highlight .ow { color: #859900 } /* Operator.Word */ +.highlight .w { color: #93A1A1 } /* Text.Whitespace */ +.highlight .mf { color: #2AA198 } /* Literal.Number.Float */ +.highlight .mh { color: #2AA198 } /* Literal.Number.Hex */ +.highlight .mi { color: #2AA198 } /* Literal.Number.Integer */ +.highlight .mo { color: #2AA198 } /* Literal.Number.Oct */ +.highlight .sb { color: #586E75 } /* Literal.String.Backtick */ +.highlight .sc { color: #2AA198 } /* Literal.String.Char */ +.highlight .sd { color: #93A1A1 } /* Literal.String.Doc */ +.highlight .s2 { color: #2AA198 } /* Literal.String.Double */ +.highlight .se { color: #CB4B16 } /* Literal.String.Escape */ +.highlight .sh { color: #93A1A1 } /* Literal.String.Heredoc */ +.highlight .si { color: #2AA198 } /* Literal.String.Interpol */ +.highlight .sx { color: #2AA198 } /* Literal.String.Other */ +.highlight .sr { color: #DC322F } /* Literal.String.Regex */ +.highlight .s1 { color: #2AA198 } /* Literal.String.Single */ +.highlight .ss { color: #2AA198 } /* Literal.String.Symbol */ +.highlight .bp { color: #268BD2 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #268BD2 } /* Name.Variable.Class */ +.highlight .vg { color: #268BD2 } /* Name.Variable.Global */ +.highlight .vi { color: #268BD2 } /* Name.Variable.Instance */ +.highlight .il { color: #2AA198 } /* Literal.Number.Integer.Long */ diff --git a/src/doc/woffify.rb b/src/doc/woffify.rb new file mode 100644 index 000000000..33c90769a --- /dev/null +++ b/src/doc/woffify.rb @@ -0,0 +1,9 @@ +require "fileutils" + +FileUtils.rm Dir["source/fonts/**/*.woff"] + +Dir["source/fonts/**/*.ttf"].each do |file| + out = file.sub(/\.ttf$/, ".woff").gsub(' ', "-") + puts "Converting `#{file}` to `#{out}`" + `~/npm/bin/ttf2woff "#{file}" "#{out}"` +end -- 2.30.2